Ich bin ganz neu hier, und hoffe das ich am richtigen Ort ansetze...
Ich habe gestern ein C Script für das auslesen meiner Geräte geschrieben und es läuft bereits nicht schlecht. Es gäbe zwar ein LoxBerry Plugin für V-ZUG Geräte, läuft bei mir aber aktuell nicht und wollte deshalb eine Alternative erstellen.
Kann mich jemand bzgl. Code unterstützen? (Meiner erster Code in C) :-)
- Ist die Schleife der richtige Ansatz für eine Abfrage pro Minute?
- Wie muss die "free" Funktion richtig genutzt werden?
- Wie kann ich ein CHAR zu INT konvertieren und an setoutput ausgeben?
- Nach ca. 6h ist das Script gecrasht - ich vermute, das Gerät war kurz nicht via httpget erreichbar und returnValue deshalb leer. Wie muss ich NULL oder "" prüfen?
///////////////////////////////////////////////////////////////////// // Start Script (PicoC) // // V-ZUG HTTP Integration, 07.09.2020 // // JSON Sample from HTTP GET // {"DeviceName":"Adora SL","Serial":"99999 99999","Inactive":"true","Program":"Vorspühlen","S tatus":"Vorspühlen","ProgramEnd":{"End":"","EndTyp e":"0"},"deviceUuid":"9999999999"} // ///////////////////////////////////////////////////////////////////// // Params char ip[15]; ip = getinputtext(0); // Init char* returnValue; char* leftValue; char deviceValue[50]; int nextQuotes; int i; // Loop the whole time while(TRUE) { // HTTP GET returnValue = httpget(ip,"/ai?command=getDeviceStatus"); setlogtext(returnValue); // Loop trough values i = 1; while(i < 8) { if ( i > 1 ) { returnValue = leftValue; } leftValue = strstrskip(returnValue,"\":\""); nextQuotes = strfind(leftValue,"\"",0); strncpy(deviceValue,leftValue,nextQuotes); setlogtext(deviceValue); if ( i == 1 ) { setoutputtext(0,deviceValue); } if ( i == 2 ) { // setoutput(0,deviceValue); } if ( i == 3 ) { // setoutput(1,deviceValue); } if ( i == 4 ) { setoutputtext(1,deviceValue); } if ( i == 5 ) { setoutputtext(2,deviceValue); } if ( i == 6 ) { // setoutput(2,deviceValue); } if ( i == 7 ) { // setoutput(3,deviceValue); } // Speicher pro Wert leeren // free(deviceValue); // --> Crash wenn diese aktiviert werden i++; } // Gesmat-Speicher leeren // free(returnValue); // --> Crash wenn diese aktiviert werden // free(leftValue); // --> Crash wenn diese aktiviert werden // Ende setlogtext("Go to sleep for 60s"); sleeps(60); }
Danke und Gruss
Jens
Kommentar