Because quested by PM here the scripts for vaccine for germany with official daily RKI-Excel-Publications:
I only have for Germany. And with new vaccines you will need to change the scripts (raise field number in greps -f. because I only found in excel:
Things:
Thing exec:command:CoVid19GetDataRKIimpf 	"EXEC Get CoVid19 RKI-Impf." 	[command="bash /etc/openhab/scripts/CoVid19_1_GetData_RKI-Impfungen.sh", interval=0, timeout=20, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIDImpfdosen "EXEC CoVid19 RKI D Impfdosen" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_D_Impfdosen.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKINRWImpfdosen "EXEC CoVid19 RKI NRW Impfdosen" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_NRW_Impfdosen.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIBImpfdosen "EXEC CoVid19 RKI B Impfdosen" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_B_Impfdosen.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIDImpfdose1 "EXEC CoVid19 RKI D 1. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_D_Impfdose1.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKINRWImpfdose1 "EXEC CoVid19 RKI NRW 1. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_NRW_Impfdose1.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIBImpfdose1 "EXEC CoVid19 RKI B 1. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_B_Impfdose1.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIDImpfdose2 "EXEC CoVid19 RKI D 2. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_D_Impfdose2.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKINRWImpfdose2 "EXEC CoVid19 RKI NRW 2. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_NRW_Impfdose2.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Thing exec:command:CoVid19RKIBImpfdose2 "EXEC CoVid19 RKI B 2. Impfung" [command="bash /etc/openhab/scripts/CoVid19_8_RKI_B_Impfdose2.sh", interval=0, timeout=60, autorun=false, transform="REGEX((.*?))"]
Items:
Switch		CoVid19_GetData_RKIimpf_Run	"Get Data RKIimpf"					(gAll, gCoVid)	{channel="exec:command:CoVid19GetDataRKIimpf:run", autoupdate="false" } 
DateTime 	CoVid19_GetData_RKIimpf_LastRun	"Get Data RKIimpf Last [%1$td.%1$tm. %1$tH:%1$tM Uhr]"	(gAll, gCoVid)	{channel="exec:command:CoVid19GetDataRKIimpf:lastexecution" } 
//String 		CoVid19_RKI_D_Impfdosen_IN 	"D Impfdosen verimpft IN (Q:RKI) [%d]" 				(gAll, gCoVid)				{channel="exec:command:CoVid19RKIDImpfdosen:output"} 
Number 		CoVid19_RKI_D_Impfdosen 	"D Impfdosen verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIDImpfdosen:output"} 
Number 		CoVid19_RKI_D_Impfdosen_New 	"D Impfdosen neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChDI1, gHistoryCh)
Switch 		CoVid19_RKI_D_Impfdosen_Run 	"D Impfdosen verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIDImpfdosen:run"} 
Number 		CoVid19_RKI_D_Impfquote 	"Impfquote D (berechnet mit 2 Impf./P.) [%.3f %%]" 		(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf_ETA50 	"D Impfq. 50% in x Tagen [%d]" 					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf_ETA60 	"D Impfq. 60% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf_ETA70 	"D Impfq. 70% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf_ETA80 	"D Impfq. 80% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impfung1 		"D 1. Impfung verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIDImpfdose1:output"} 
Number 		CoVid19_RKI_D_Impfung1_New 	"D 1. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChDI1, gHistoryCh)
Switch 		CoVid19_RKI_D_Impfung1_Run 	"D 1. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIDImpfdose1:run"} 
Number 		CoVid19_RKI_D_Impfquote1 	"Impfquote D (1. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_D_Impf1_ETA50 	"D 1.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_D_Impf1_ETA60 	"D 1.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf1_ETA70 	"D 1.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf1_ETA80 	"D 1.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impfung2 		"D 2. Impfung verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIDImpfdose2:output"} 
Number 		CoVid19_RKI_D_Impfung2_New 	"D 2. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChDI1, gHistoryCh)
Switch 		CoVid19_RKI_D_Impfung2_Run 	"D 2. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIDImpfdose2:run"} 
Number 		CoVid19_RKI_D_Impfquote2 	"Impfquote D (2. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_D_Impf2_ETA50 	"D 2.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_D_Impf2_ETA60 	"D 2.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf2_ETA70 	"D 2.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_D_Impf2_ETA80 	"D 2.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
//String 		CoVid19_RKI_NRW_Impfdosen_IN 	"NRW Impfdosen verimpft IN (Q:RKI) [%d]" 			(gAll, gCoVid)				{channel="exec:command:CoVid19RKINRWImpfdosen:output"} 
Number 		CoVid19_RKI_NRW_Impfdosen 	"NRW Impfdosen verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKINRWImpfdosen:output"} 
Number 		CoVid19_RKI_NRW_Impfdosen_New 	"NRW Impfdosen neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChNRW4, gHistoryCh)
Switch 		CoVid19_RKI_NRW_Impfdosen_Run 	"NRW Impfdosen verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKINRWImpfdosen:run"} 
Number 		CoVid19_RKI_NRW_Impfquote 	"Impfquote NRW (berechnet mit 2 Impf./P.) [%.3f %%]" 		(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf_ETA50 	"NRW Impfq. 50% in x Tagen [%d]" 				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf_ETA60 	"NRW Impfq. 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf_ETA70 	"NRW Impfq. 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf_ETA80 	"NRW Impfq. 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impfung1 	"NRW 1. Impfung verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKINRWImpfdose1:output"} 
Number 		CoVid19_RKI_NRW_Impfung1_New 	"NRW 1. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChNRW4, gHistoryCh)
Switch 		CoVid19_RKI_NRW_Impfung1_Run 	"NRW 1. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKINRWImpfdose1:run"} 
Number 		CoVid19_RKI_NRW_Impfquote1 	"Impfquote NRW (1. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf1_ETA50 	"NRW 1.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf1_ETA60 	"NRW 1.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf1_ETA70 	"NRW 1.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf1_ETA80 	"NRW 1.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impfung2 	"NRW 2. Impfung verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKINRWImpfdose2:output"} 
Number 		CoVid19_RKI_NRW_Impfung2_New 	"NRW 2. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChNRW4, gHistoryCh)
Switch 		CoVid19_RKI_NRW_Impfung2_Run 	"NRW 2. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKINRWImpfdose2:run"} 
Number 		CoVid19_RKI_NRW_Impfquote2 	"Impfquote NRW (2. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf2_ETA50 	"NRW 2.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf2_ETA60 	"NRW 2.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf2_ETA70 	"NRW 2.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_NRW_Impf2_ETA80 	"NRW 2.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
//String 		CoVid19_RKI_B_Impfdosen_IN 	"B Impfdosen verimpft IN (Q:RKI) [%d]" 				(gAll, gCoVid)				{channel="exec:command:CoVid19RKIBImpfdosen:output"} 
Number 		CoVid19_RKI_B_Impfdosen 	"B Impfdosen verimpft (Q:RKI) [%d]" 				(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIBImpfdosen:output"} 
Number 		CoVid19_RKI_B_Impfdosen_New 	"B Impfdosen neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChB5, gHistoryCh)
Switch 		CoVid19_RKI_B_Impfdosen_Run 	"B Impfdosen verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIBImpfdosen:run"} 
Number 		CoVid19_RKI_B_Impfquote 	"Impfquote B (berechnet mit 2 Impf./P.) [%.3f %%]" 		(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf_ETA50 	"B Impfq. 50% in x Tagen [%d]" 					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf_ETA60 	"B Impfq. 60% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf_ETA70 	"B Impfq. 70% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf_ETA80 	"B Impfq. 80% in x Tagen [%d]"					(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impfung1 	"B 1. Impfung verimpft (Q:RKI) [%d]" 					(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIBImpfdose1:output"} 
Number 		CoVid19_RKI_B_Impfung1_New 	"B 1. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChB5, gHistoryCh)
Switch 		CoVid19_RKI_B_Impfung1_Run 	"B 1. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIBImpfdose1:run"} 
Number 		CoVid19_RKI_B_Impfquote1 	"Impfquote B (1. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_B_Impf1_ETA50 	"B 1.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_B_Impf1_ETA60 	"B 1.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf1_ETA70 	"B 1.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf1_ETA80 	"B 1.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impfung2 	"B 2. Impfung verimpft (Q:RKI) [%d]" 					(gAll, gCoVid, gCoVidDIC, gHistoryCh)		{channel="exec:command:CoVid19RKIBImpfdose2:output"} 
Number 		CoVid19_RKI_B_Impfung2_New 	"B 2. Impfung neu verimpft (Q:RKI) [%d]" 			(gAll, gCoVid, gCoVidChB5, gHistoryCh)
Switch 		CoVid19_RKI_B_Impfung2_Run 	"B 2. Impfung verimpft RUN (Q:RKI)" 				(gAll, gCoVid, gCoVidDIRun)				{channel="exec:command:CoVid19RKIBImpfdose2:run"} 
Number 		CoVid19_RKI_B_Impfquote2 	"Impfquote B (2. Impfung) [%.3f %%]" 				(gAll, gCoVid, gCoVidChDI2, gHistoryCh)
Number 		CoVid19_RKI_B_Impf2_ETA50 	"B 2.Impfung 50% in x Tagen [%d]" 				(gAll, gCoVid, gCoVidChDIETA, gHistoryCh)
Number 		CoVid19_RKI_B_Impf2_ETA60 	"B 2.Impfung 60% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf2_ETA70 	"B 2.Impfung 70% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Number 		CoVid19_RKI_B_Impf2_ETA80 	"B 2.Impfung 80% in x Tagen [%d]"				(gAll, gCoVid, gHistoryCh)
Rules (inclusive calculation of ETA in days for mass immunity):
rule "CoVid Trigger Get-Data-Files RKI, RKI-Impf, Divi und NRW"
when
    Time cron "0 18,48 5-2 ? * * *"
then
    logInfo("CoVid Trigger Get-Data-Files RKI, RKI-Impf, Divi und NRW", "CoVid19 - Every 30m - Get new Data Files: RKI, Divi und NRW")
    CoVid19_GetData_RKIimpf_Run.sendCommand(ON)
end
var Timer USAcalcTimer = null
var Timer DIcalcTimer = null
var Timer NRWIcalcTimer = null
var Timer BIcalcTimer = null
rule "CoVid Berechnungen Impfungen D"
when
//    Time cron "0 /2 * ? * * *" or
    Item gCoVidDIC changed
then
    val int delaySec=30
    logInfo("Covid Work Impfungen D", "CoVid19 - Calculate D Impfungen Timer")
    if(DIcalcTimer === null) {
        DIcalcTimer = createTimer(now.plusSeconds(delaySec), [|
            CoVid19_RKI_D_Impfung1_New.postUpdate(CoVid19_RKI_D_Impfung1.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_D_Impfung2_New.postUpdate(CoVid19_RKI_D_Impfung2.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_D_Impfdosen_New.postUpdate(CoVid19_RKI_D_Impfdosen.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_D_Impfquote1.postUpdate(CoVid19_RKI_D_Impfung1.state as Number / 830200.00)
            CoVid19_RKI_D_Impfquote2.postUpdate(CoVid19_RKI_D_Impfung2.state as Number / 830200.00)
// Berechnung ETA Herdenimmunität
            CoVid19_RKI_D_Impf1_ETA50.postUpdate((41510000.0 - CoVid19_RKI_D_Impfung1.state as Number) / (CoVid19_RKI_D_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf1_ETA60.postUpdate((49812000.0 - CoVid19_RKI_D_Impfung1.state as Number) / (CoVid19_RKI_D_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf1_ETA70.postUpdate((58114000.0 - CoVid19_RKI_D_Impfung1.state as Number) / (CoVid19_RKI_D_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf1_ETA80.postUpdate((66416000.0 - CoVid19_RKI_D_Impfung1.state as Number) / (CoVid19_RKI_D_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf2_ETA50.postUpdate((41510000.0 - CoVid19_RKI_D_Impfung2.state as Number) / (CoVid19_RKI_D_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf2_ETA60.postUpdate((49812000.0 - CoVid19_RKI_D_Impfung2.state as Number) / (CoVid19_RKI_D_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf2_ETA70.postUpdate((58114000.0 - CoVid19_RKI_D_Impfung2.state as Number) / (CoVid19_RKI_D_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_D_Impf2_ETA80.postUpdate((66416000.0 - CoVid19_RKI_D_Impfung2.state as Number) / (CoVid19_RKI_D_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            logInfo("Covid Work Impfungen D", "CoVid19 - Calculate D Impfungen done")
            DIcalcTimer.cancel
            DIcalcTimer=null
        ] )
    }
    else {
        DIcalcTimer.reschedule(now.plusSeconds(delaySec))
    }
end
rule "CoVid Berechnungen Impfungen NRW"
when
//    Time cron "0 /2 * ? * * *" or
    Item gCoVidDIC changed
then
    val int delaySec=30
    logInfo("Covid Work Impfungen NRW", "CoVid19 - Calculate NRW Impfungen Timer")
    if(NRWIcalcTimer === null) {
        NRWIcalcTimer = createTimer(now.plusSeconds(delaySec), [|
            CoVid19_RKI_NRW_Impfung1_New.postUpdate(CoVid19_RKI_NRW_Impfung1.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_NRW_Impfung2_New.postUpdate(CoVid19_RKI_NRW_Impfung2.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_NRW_Impfdosen_New.postUpdate(CoVid19_RKI_NRW_Impfdosen.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_NRW_Impfquote1.postUpdate(CoVid19_RKI_NRW_Impfung1.state as Number / 179470.00)
            CoVid19_RKI_NRW_Impfquote2.postUpdate(CoVid19_RKI_NRW_Impfung2.state as Number / 179470.00)
// Berechnung ETA Herdenimmunität
            CoVid19_RKI_NRW_Impf1_ETA50.postUpdate((8973500.0 - CoVid19_RKI_NRW_Impfung1.state as Number ) / (CoVid19_RKI_NRW_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf1_ETA60.postUpdate((10768200.0 - CoVid19_RKI_NRW_Impfung1.state as Number ) / (CoVid19_RKI_NRW_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf1_ETA70.postUpdate((12562900.0 - CoVid19_RKI_NRW_Impfung1.state as Number ) / (CoVid19_RKI_NRW_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf1_ETA80.postUpdate((14357600.0 - CoVid19_RKI_NRW_Impfung1.state as Number ) / (CoVid19_RKI_NRW_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf2_ETA50.postUpdate((8973500.0 - CoVid19_RKI_NRW_Impfung2.state as Number ) / (CoVid19_RKI_NRW_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf2_ETA60.postUpdate((10768200.0 - CoVid19_RKI_NRW_Impfung2.state as Number ) / (CoVid19_RKI_NRW_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf2_ETA70.postUpdate((12562900.0 - CoVid19_RKI_NRW_Impfung2.state as Number ) / (CoVid19_RKI_NRW_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_NRW_Impf2_ETA80.postUpdate((14357600.0 - CoVid19_RKI_NRW_Impfung2.state as Number ) / (CoVid19_RKI_NRW_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            logInfo("Covid Work Impfungen D", "CoVid19 - Calculate NRW Impfungen done")
            NRWIcalcTimer.cancel
            NRWIcalcTimer=null
        ] )
    }
    else {
        NRWIcalcTimer.reschedule(now.plusSeconds(delaySec))
    }
end
rule "CoVid Berechnungen Impfungen B"
when
//    Time cron "0 /2 * ? * * *" or
    Item gCoVidDIC changed
then
    val int delaySec=30
    logInfo("Covid Work Impfungen NRW", "CoVid19 - Calculate NRW Impfungen Timer")
    if(BIcalcTimer === null) {
        BIcalcTimer = createTimer(now.plusSeconds(delaySec), [|
            CoVid19_RKI_B_Impfung1_New.postUpdate(CoVid19_RKI_B_Impfung1.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_B_Impfung2_New.postUpdate(CoVid19_RKI_B_Impfung2.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_B_Impfdosen_New.postUpdate(CoVid19_RKI_B_Impfdosen.deltaSince(now.minusMinutes(720)))
            CoVid19_RKI_B_Impfquote1.postUpdate(CoVid19_RKI_B_Impfung1.state as Number / 36690.00)
            CoVid19_RKI_B_Impfquote2.postUpdate(CoVid19_RKI_B_Impfung2.state as Number / 36690.00)
// Berechnung ETA Herdenimmunität
            CoVid19_RKI_B_Impf1_ETA50.postUpdate((1834500.0 - CoVid19_RKI_B_Impfung1.state as Number ) / (CoVid19_RKI_B_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf1_ETA60.postUpdate((2201400.0 - CoVid19_RKI_B_Impfung1.state as Number ) / (CoVid19_RKI_B_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf1_ETA70.postUpdate((2568300.0 - CoVid19_RKI_B_Impfung1.state as Number ) / (CoVid19_RKI_B_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf1_ETA80.postUpdate((2935200.0 - CoVid19_RKI_B_Impfung1.state as Number ) / (CoVid19_RKI_B_Impfung1.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf2_ETA50.postUpdate((1834500.0 - CoVid19_RKI_B_Impfung2.state as Number ) / (CoVid19_RKI_B_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf2_ETA60.postUpdate((2201400.0 - CoVid19_RKI_B_Impfung2.state as Number ) / (CoVid19_RKI_B_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf2_ETA70.postUpdate((2568300.0 - CoVid19_RKI_B_Impfung2.state as Number ) / (CoVid19_RKI_B_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            CoVid19_RKI_B_Impf2_ETA80.postUpdate((2935200.0 - CoVid19_RKI_B_Impfung2.state as Number ) / (CoVid19_RKI_B_Impfung2.deltaSince(now.minusHours(324)) as Number / 14.0 ))
            logInfo("Covid Work Impfungen D", "CoVid19 - Calculate B Impfungen done")
            BIcalcTimer.cancel
            BIcalcTimer=null
        ] )
    }
    else {
        BIcalcTimer.reschedule(now.plusSeconds(delaySec))
    }
end
Scripts (only Get Data and Example Berlin and because of little different Germany in total)
CoVid19_1_GetData_RKI-Impfungen.sh (Package with xlsx2csv needed)
#! /bin/bash
cd /tmp
RUNTIME=`date +%Y-%m-%d`
if [ ! -f /tmp/$RUNTIME.xlsx ]
then
    mv CoVid_Data_RKI_D_Impfdaten.xlsx /tmp/$RUNTIME.xlsx
else
    rm CoVid_Data_RKI_D_Impfdaten.xlsx
fi
rm CoVid_Data_RKI_D_Impfdaten.csv
DELE=$(/bin/wget -q -O CoVid_Data_RKI_D_Impfdaten.xlsx 'https://www.rki.de/DE/Content/InfAZ/N/Neuartiges_Coronavirus/Daten/Impfquotenmonitoring.xlsx?__blob=publicationFile')
CONV=$(xlsx2csv CoVid_Data_RKI_D_Impfdaten.xlsx -a > CoVid_Data_RKI_D_Impfdaten.csv)
DATA="got it"
echo $DATA
Script CoVid19_8_RKI_B_Impfdose1.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep "Berlin" -m 1 | cut -d, -f4)
echo $DATA
Script CoVid19_8_RKI_B_Impfdose2.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep "Berlin" -m 1 | cut -d, -f10)
echo $DATA
Script CoVid19_8_RKI_B_Impfdosen.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep "Berlin" -m 1 | cut -d, -f3)
echo $DATA
Script CoVid19_8_RKI_D_Impfdose1.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep ",Gesamt," -m2 | grep -v Moderna | cut -d, -f4)
echo $DATA
Script CoVid19_8_RKI_D_Impfdose2.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep ",Gesamt," -m2 | grep -v Moderna | cut -d, -f10)
echo $DATA
Script CoVid19_8_RKI_D_Impfdosen.sh
#! /bin/bash
DATA=$(cat /tmp/CoVid_Data_RKI_D_Impfdaten.csv | grep ",Gesamt," -m 2 | grep -v BioNTech | cut -d, -f3)
echo $DATA
I hope I didn’t forget something.
Remember:
- New vaccines: In scripts impfdosis2 the field in grep has to be raised, otherwise value of percent will be overtaken
 
- Sometimes the RKI changes somes Texts in Excel, so grep ,Gesamt, won’t work, then you need to change the script D over all
 
- If want to calculate ETA for other regions, you need to change in rules the amount of e.g. 50% citizens need to got the vaccine to the 50% citizens of those other region.