IPS 4.0 Infinity Bug?

Moin zusammen,

ich habe heute ein wenig an meinen Flower Power Skripten geschraubt, und bin dabei auf eine sehr unangenehme Geschichte gestossen. Und zwar bekomme ich von einem BT RaspberryPI Hub Daten meiner FlowerPower Devices. Und zwar per Webserver und Textdatei… ähnlich diesem hier…


Tue Feb 23 2016 14:00:03 GMT+0100 (CET)
Start discover phase (10 Sek) ...
Found FlowerPower device 9003b7e7dded
Found FlowerPower device a0143d07c9dd
Start data phase...
connectAndSetup
connectAndSetup
[9003b7e7dded] serial number = PI040297AA3K015149
[9003b7e7dded] soil temperature = 22.66
[9003b7e7dded] air temperature = 25.25
[9003b7e7dded] soil moisture = 16.34
[9003b7e7dded] sunlight = 0.86
[9003b7e7dded] battery level = 100
[9003b7e7dded] soil electrical conductivity = 363.00
[9003b7e7dded] disconnected!
[a0143d07c9dd] serial number = PI040297AA3L025048
[a0143d07c9dd] soil temperature = 22.16
[a0143d07c9dd] air temperature = 24.89
[a0143d07c9dd] soil moisture = 11.22
[a0143d07c9dd] sunlight = 0.39
[a0143d07c9dd] battery level = 89
[a0143d07c9dd] soil electrical conductivity = 222.00
[a0143d07c9dd] disconnected!
Stop script...

Daraus parse ich dann per PHP Skript die Daten und erzeuge automatisch Variablen usw.

Jede Zeile geht durch

			$value = trim(explode("=",$logLine)[1]);
			$value = str_replace(".",",",$value);

und wird dann am Ende mit

			
CreateVariable("Seriennummer", 3,$value , "ident", $catID );

geschrieben.

Es lief schon eine ganze Weile, bis dann plötzlich die ganze IPS Geschichte abgestürzt ist.
Nach kleiner Recherche habe ich dann folgendes im Logfile gefunden…

Array
(
    [9003b7e7dded] => Array
        (
            [serialNumber] => PI040297AA3K015149
            [soilTemperature] => -10,00
            [airTemperature] => -10,00
            [soilMoisture] => 21,56
            [sunlight] => Infinity
            [batteryLevel] => 100
            [soilElectricalConductivity] => 0,00
        )

    [a0143d07c9dd] => Array
        (
            [serialNumber] => PI040297AA3L025048
            [soilTemperature] => 22,16
            [airTemperature] => 26,33
            [soilMoisture] => 11,47
            [sunlight] => 0,92
            [batteryLevel] => 88
            [soilElectricalConductivity] => 221,00
        )

)
CreateCategory: ( PI040297AA3K015149, PI040297AA3K015149, 52355 ) 
CreateVariable: ( Seriennummer, 3, PI040297AA3K015149, _serialNumber, 21313 ) 
CreateVariable: ( Bodentemperatur, 2, -10,00, _soilTemperature, 21313 ) 
CreateVariable: ( Lufttemperatur, 2, -10,00, _airTemperature, 21313 ) 
CreateVariable: ( Bodenfeuchtigkeit, 2, 21,56, _soilMoisture, 21313 ) 
CreateVariable: ( PFD, 2, Infinity, _sunlight, 21313 ) 
CreateVariable: ( Zustand Batterie, 1, 100, _batteryLevel, 21313 ) 
CreateVariable: ( Letzte Meldung, 1, 1456231502, _lastMessage, 21313 ) 
CreateVariable: ( Bodenleitfähigkeit, 2, 0,00, _soilElectricalConductivity, 21313 ) 
CreateVariable: ( Bild, 3, Bild eintragen!<img src=''>, _picture, 21313 ) 
CreateCategory: ( PI040297AA3L025048, PI040297AA3L025048, 52355 ) 
CreateVariable: ( Seriennummer, 3, PI040297AA3L025048, _serialNumber, 24832 ) 
CreateVariable: ( Bodentemperatur, 2, 22,16, _soilTemperature, 24832 ) 
CreateVariable: ( Lufttemperatur, 2, 26,33, _airTemperature, 24832 ) 
CreateVariable: ( Bodenfeuchtigkeit, 2, 11,47, _soilMoisture, 24832 ) 
CreateVariable: ( PFD, 2, 0,92, _sunlight, 24832 ) 
CreateVariable: ( Zustand Batterie, 1, 88, _batteryLevel, 24832 ) 
CreateVariable: ( Letzte Meldung, 1, 1456231502, _lastMessage, 24832 ) 
CreateVariable: ( Bodenleitfähigkeit, 2, 221,00, _soilElectricalConductivity, 24832 ) 
CreateVariable: ( Bild, 3, Bild eintragen!<img src=''>, _picture, 24832 ) 


Besonderes Augenmerk hier mal bitte auf die Zeile "CreateVariable: ( PFD, 2, Infinity, _sunlight, 21313 ) "

Dort steht als Value Infinity…

Wenn ich jetzt in meiner Settings.json schaue, ist genau an dem Value EIntrag alles im Mors gegangen.

        "ID43358": {
            "position": 0,
            "readOnly": false,
            "ident": "_soilMoisture",
            "hidden": false,
            "disabled": false,
            "type": 2,
            "name": "Bodenfeuchtigkeit",
            "info": "",
            "icon": "",
            "parentID": 21313,
            "data": {
                "action": 0,
                "customAction": 0,
                "profile": "",
                "lastUpdate": 1456232400,
                "value": 21.56,
                "customProfile": "~Humidity.F",
                "lastChange": 1456231800,
                "type": 2
            }
        },
        "ID38069": {
            "position": 0,
            "readOnly": false,
            "ident": "_sunlight",
            "hidden": false,
            "disabled": false,
            "type": 2,
            "name": "PFD",
            "info": "",
            "icon": "",
            "parentID": 21313,
            "data": {
                "action": 0,
                "customAction": 0,
                "profile": "",
                "lastUpdate": 1456232400,
                "value": 

Das ist das Ende vom File… danach kommt nix mehr.

Das MUSS ein Fehler sein.

Was sagt der Chef?

Hallo Spoosie,

Ich kann zwar nicht bei diesem Problem helfen, aber ich hätte Interesse an deiner lösung die Sensoren lokal über BT abzufragen, ohne über die Flower Power app zu gehen.
Ich würde das ganze zwar über win7 mit bt stick machen (mein ips server), aber das Prinzip ist denke ich ja dass gleiche mit Webserver.

Währe schön wenn du mir dein vorgehen dabei näher erläutern könntest.

Vielen Dank

Sebastian

Ich hatte vorhin noch überlegt alles zu veröffentlichen. Aber jetzt ist mir die ganze Settings kaputt gegangen. Das Skript habe ich noch wieder gefunden.

IPS startet nicht mehr, und ich musste auf ein Backup von gestern zurückgreifen. Da ist dann allerdings alles alter Krams. Und ich muss von Vorne anfangen.

Da ich jetzt noch viel mehr schiss vor einem Wechsel zur 4.0 habe (das hier war mein Test System) wollte ich diesen Bug noch eben durchreichen. In der Hoffnung, dass Paresy damit was anfangen kann.

Was genau zu einem Infinity geführt hat, kann ich leider nicht mehr sagen. Nur das die Variable wie in dem print_r vom Array war, und damit anscheinend per SetValue alles kaputt geschrieben wird?!

Kurz vorab: Ich vermute den Fehler gefunden zu haben. Ein Fix der JSON Library bricht bei den Werten ab um 100% JSON konform zu bleiben. Ich bin dabei den Fehler zu korrigieren sodass er in der RC4 korrigiert ist. Der Fehler ist wahrscheinlich seit RC2/RC3 drin.

paresy