Hilfe bei Scripterstellung benötigt.

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
magnum1795
Beiträge: 246
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 39 Mal
Danksagung erhalten: 21 Mal

Hilfe bei Scripterstellung benötigt.

Beitrag von magnum1795 » 16.03.2021, 22:01

Hallo, möchte eine Webseite per json abfragen und dann die ausgelesenen Daten in zwei Systemvariablen schreiben.

Wenn ich z.B. im Browser das hier eingebe >

Code: Alles auswählen

http://192.168.0.117/json

kommt dann als Antwort das hier raus:

Code: Alles auswählen

{"Sensor":"Zisterne","IP":"192.168.0.117","Fuellstand":"53","Abstand":"86"}
Nun würde ich gern ein Zeitgesteuertes Programm erstellen und eben das Script dann in Zeitabständen abfragen. Dieses soll wie oben beschrieben die Daten auslesen und in zwei Variablen schreiben. Leider habe ich absolut Null Ahnung und weiß nicht wie bzw. was genau ich in das Script eintragen muss. Bräuchte daher dringend eine Anschubshilfe oder Beispiel wie das aussehen sollte. Vielen Dank schon mal.

PS: die zwei Variablen würde ich selbst erstellen und eine abstand und die andere eben dann fuellstand benennen wollen.
Zuletzt geändert von alchy am 16.03.2021, 22:03, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: Hilfe bei Scripterstellung benötigt.

Beitrag von MichaelN » 16.03.2021, 22:14

LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

magnum1795
Beiträge: 246
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 39 Mal
Danksagung erhalten: 21 Mal

Re: Hilfe bei Scripterstellung benötigt.

Beitrag von magnum1795 » 17.03.2021, 08:16

@ MichaelN

vielen Dank für den Link. Einen Teilerfolg habe ich nun schonmal. Der Füllstand wird in eine Variable geschrieben, der Abstand leider noch nicht.

ich habe das Script so auf meine Bedürfnisse angepasst.

Code: Alles auswählen

!V1.0 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=26&t=65051&p=639981#p639981
string url = "http://192.168.0.117/json";
string prefix = "RT_";
string rueck;
string error;
object SV;

system.Exec("wget --no-check-certificate --timeout=2 -O - '"#url#"'" , &rueck, &error);
if (!rueck== "")
{
   WriteLine("HTTP-Request OK");
   rueck = rueck.Replace('"','');
   string Part; 

   foreach (Part, rueck.Split(",") ){
           if (Part.Contains(":"))
           {
           Part = Part.Replace(":",";");
           WriteLine (prefix # web.webGetValueFromList(Part,0) #" = "# web.webGetValueFromList(Part,1));
           SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # web.webGetValueFromList(Part,0)));
           if (SV) {
              SV.State(web.webGetValueFromList(Part,1));
              WriteLine("=== SV "#prefix # web.webGetValueFromList(Part,0)#" written ===");
              }
           }
   }
} else {
  WriteLine("Error at HTTP Request");
}
Als Ausgabe erhalte ich das hier

Code: Alles auswählen

HTTP-Request OK
RT_{Sensor = Zisterne
RT_IP = 192.168.0.117
RT_Fuellstand = 63
=== SV RT_Fuellstand written ===
RT_Abstand = 69}
=== SV RT_Abstand written ===
und meine beiden Systemvariablen habe ich so angelegt wie auf den Bildern zu sehen. Was oder wie muss ich denn ändern damit auch der Abstand mit Daten gefüllt wird? Wie gesagt, Füllmenge in % klappt schonmal sehr gut.

PS: bin jetzt etwas weiter gekommen. Bei der erstellung der Systemvariable "RT_Abstand" habe ich jetzt nicht Zahl sondern Wert eingegeben. Nun wird die Variable RT_Abstand auch gefüllt, allerdings am Ende immer mit dem } Zeichen. Wie bekommt man denn dieses nun weg bzw das nur der Wert angezeigt wird? Anbei noch paar Bilder worauf man es erkennt.
Dateianhänge
abstand.jpg
füllstand.jpg
systemvariablen anzeige.jpg
3.jpg
2.jpg
1.jpg

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: Hilfe bei Scripterstellung benötigt.

Beitrag von MichaelN » 17.03.2021, 10:34

Problem war, das ich die {} nicht ausgefiltert habe

Den PArt

Code: Alles auswählen

   WriteLine("HTTP-Request OK");
   rueck = rueck.Replace('"','');
   string Part;        
   
musst Du ergänzen zu:

Code: Alles auswählen

   WriteLine("HTTP-Request OK");
   rueck = rueck.Replace('{','');
   rueck = rueck.Replace('}','');
   rueck = rueck.Replace('"','');
   string Part;        
Dann wird es funktionieren
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

magnum1795
Beiträge: 246
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 39 Mal
Danksagung erhalten: 21 Mal

Re: Hilfe bei Scripterstellung benötigt.

Beitrag von magnum1795 » 17.03.2021, 11:20

@ MichaelN

Vielen Dank. Nun funktioniert es und wird alles Richtig angezeigt. Es fehlen nun zwar die cm Anzeige, aber das stört mich nicht da ich das ja in der Smartha App mit einfügen kann und somit auch auf den Handy/Tablet alles Richtig wieder gegeben wird
Dateianhänge
5.jpg
4.jpg

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Hilfe bei Scripterstellung benötigt.

Beitrag von dtp » 07.04.2021, 07:29

Leg die Systemvariable "RTHof_Abstand" mal wieder als Zahl an. Dann wird dir auch die Einheit angezeigt. Dass zuvor kein Wert in die Systemvarialbe geschrieben wurde, lag ja an der geschlossenen, geschweiften Klammer, die aus dem Zahlenwert ein String machte. Aber die wurde ja nun eliminiert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“