Einrichtung/Simulation Hagelbox auf HomeMatic

Bei den Gebäudeversicherungen kann man eine kostenlose Hagelbox bestellen, welche dann allfällige Hagel-Alarme dazu nutzt, um Storen hochzufahren etc..
Details siehe:
https://www.hagelschutz-einfach-automatisch.ch/eigentuemer-verwaltungen/das-system-erklaert/anleitung.html

Bei einem HomeMatic-System lassen sich die Hagel-Alarme in der CCU direkt über das METEO REST API abfragen und auswerten. Der Betrieb einer zusätzlichen Box ist obsolet.

Unter Kapitel 4.2 der PDF-Anleitung ist dieses Vorgehen für aktuelle Smarthome-Systeme im Detail erklärt.
https://www.hagelschutz-einfach-automatisch.ch/files/media/hagelschutz-einfach-automatisch/hagelschutz-einfach-automatisch-anleitung-konfiguration-faq-gen3.pdf



Vorerst muss das Registrations-Formular bei hagelschutz-einfach-automatisch.ch ausgefüllt werden.
Bei Bemerkungen nicht vergessen zu erwähnen, dass man keine Hagelbox will und nur Zugriff auf das METEO REST API. Man kann auch gleich die MAC-Adresse der CCU mitliefern.


Sobald die Registration komplett ist, erhält man die persönlichen Zugangsdaten zum Portal von meteo.netitservices.com und Detailinformationen zur Abfrage via REST API, d.h. die komplette URL.

Damit das Herausfahren der Storen bei einem anstehenden Hagel-Alarm verhindert werden kann, dürfen keine entsprechenden Direktverknüpfungen zwischen Taster und Rollladen-Aktor bestehen.
Stattdessen braucht es ein Mini-Programm, dass den Hagel-Alarm-Zustand (Systemvariable) prüft, bevor der Befehl zum Herausfahren an den Aktor weitergeleitet wird.

Löschen der Direkt-Verknüpfung Taster–>Aktor zum Herausfahren.
Kleines Programm in der CCU anlegen, anstelle der gelöschten Direkt-Verknüpfung Taster–>Aktor
und darin den Zustand der Systemvariablen HailState prüfen, bevor ein Befehl an den Aktor geht.

Script zur Erstellung einer Systemvariablen HailState:

! create persistent variable
string persistentVarName="HailState";

object	sysVar  = dom.GetObject(persistentVarName);
object 	sysVarObjects = dom.GetObject(ID_SYSTEM_VARIABLES);

if (sysVar  ) {
	WriteLine("System Variable "#persistentVarName#" already exists!");
} else {
	sysVar = dom.CreateObject(OT_VARDP);
	sysVarObjects.Add(sysVar.ID());
	sysVar.Name(persistentVarName);
	sysVar.ValueType(ivtInteger);
	sysVar.ValueSubType(istEnum);
	sysVar.DPInfo("Zustand HagelWarnung");
	sysVar.ValueUnit("");
	sysVar.ValueList("keinHagel;HagelWARNUNG;testHagelWARNUNG;keineVerbindung;unbekannt");
	sysVar.DPArchive(true); !do  log changes of this system var
	sysVar.State(4); ! initial value
	sysVar.Internal(false); !not an internal var
	sysVar.Visible(true);
	WriteLine(persistentVarName#" created.");
}  

Script zur Abfrage der Hagelwarnung via REST API:

! Script zur Abfrage der Hagelwarnung
! V1.0 - 01..03.2024

!speichert den Abfragestatus in einer Systemvariable, welche dann für das "Storen-Hoch"-Kommando direkt gesetzt wird 
!alle Zustände ungleich 0 sollten als HagelWarnung interpretiert werden.
!
! Storen Ausfahren / runter - Taster duerfen NICHT mehr direkt programmiert werden.
! In einem Script muessen diese Taster zusaetzlich die SV-Variable HailState auf "keinHagel" / 0 pruefen.

!script to be called each 2 minutes
!
!

! init	
string needle="";
string comma = ",";
integer valPos=0;
integer hailState=4;
integer oldHailState=4;

!froll-Aktoren
string rollladenOST="HmIP-RF.00115F29ABE946:4.LEVEL";
string rollladenSUED="HmIP-RF.00115D89AED3BA:4.LEVEL";  

!sv for Hagelwarnung
string sv_HagelWarnung="HailState";

! Feste IP Adresse des HAGEL-Warnservice / URL zur Abfrage der Hagelwarnung
string data_url= "https://meteo.netitservices.com/api/v1/devices/MAC-Adresse/poll?hwtypeId=nr";

! CUxD-device for system calls
var CUxD_Device = "CUxD.CUX2801001:4";
!
!Mail-Versand
!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/etc/config/addons/email/email 01");

! Werte vom HAGEL-Warnservicer holen ...
dom.GetObject(CUxD_Device + ".CMD_SETS").State("wget -q -O - '" + data_url + "'");
dom.GetObject(CUxD_Device + ".CMD_QUERY_RET").State(1);
string data_json = dom.GetObject(CUxD_Device + ".CMD_RETS").State();

if (data_json=="") { ! no connection to HAGEL-Warnservice ... keep current values etc.
	#dom.GetObject(sv_HagelWarnung).State(3);
} else {

	oldHailState=dom.GetObject(sv_HagelWarnung).State().ToInteger();
	
	needle = "\"currentState\" : ";
	valPos = data_json.Find(needle) +  needle.Length();
	hailState = data_json.Substr(valPos,20).StrValueByIndex(comma,0).ToInteger();
	
	if ((oldHailState != hailState) && (oldHailState==0)) { ! state change to HAIL Warning    

		! Storen hoch
		dom.GetObject(rollladenSUED).State(1.0);
		dom.GetObject(rollladenOST).State(1.0); 
		
		!Mail-Versand
		dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/etc/config/addons/email/email 03");

	}
	dom.GetObject(sv_HagelWarnung).State(hailState);
}