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