Code Device - Code to get value (Return Werte)

Post Reply
Tobus
Posts: 27
Joined: 31 Mar 2017 17:50

Code Device - Code to get value (Return Werte)

Post by Tobus »

Hallo,
ich habe hier glaube ich ein Verständnisproblem bei den Code Devices.

Ich möchte, dass mein Schalter
on: Smartphone im WLAN
off: Smartphone nicht im WLAN
ist.

Nun habe ich ein Code Device angelegt, unter 'Code to get value' wird ein Python Skript aufgerufen wird, was im Moment lediglich folgendes enthält:

Code: Select all

sys.stdout.write('on')
Im Logfile sehe ich:

Code: Select all

[2017-04-15 13:34:50.819] [I] [core] Notification: device-info (device-OnOff): {"dev":"test return","l":[0,"on"]}
Der Schalter ist jedoch in einem undefinierten Zustand, also weder 'on' noch 'off'.
Sieht jemand, was ich hier falsch mache?

Vielen Dank
Tobias
vh342
Posts: 14
Joined: 19 Jan 2016 23:20

Re: Code Device - Code to get value (Return Werte)

Post by vh342 »

Hallo Tobus,

hast Du es in der Zwischenzeit selbst lösen können?

Das Problem liegt darin, dass Du in Deiner Abfrage den falschen Return-Wert auswertest. Wie Du in der Beispielzeile im Log siehst, kommt als Rückgabe
[0,"on"]
an. Das ist ein Array mit zwei Werten: der Erste ist der Exit-, der Zweite der Return-Wert des Skriptes. Für Z-way ist der Letztere interessant!

So bekommst Du die korrekten Werte:

Code: Select all

sys.stdout.write('on')[1]
Tobus
Posts: 27
Joined: 31 Mar 2017 17:50

Re: Code Device - Code to get value (Return Werte)

Post by Tobus »

Hallo vh342,
hier verstehe ich etwas nicht.

Du schreibst, dass vom Array [0, "on"] der letztere Wert für das ZWay das Interessante ist. Aber hier ist doch das "on" der erste, die 0 der nullte Wert.

Bei

Code: Select all

sys.stdout.write('on')[1]
bekomme ich die Meldung

Code: Select all

TypeError: 'NoneType' object has no attribute '__getitem__'
Kannst du mir hier nochmals helfen?

Vielen Dank
Tobias
vh342
Posts: 14
Joined: 19 Jan 2016 23:20

Re: Code Device - Code to get value (Return Werte)

Post by vh342 »

Hallo Tobus,

in meinem vorherigen Posting stand Blödsinn. Ich hatte Dein Beispiel nicht richtig gelesen - die Auswertung des Return-Arrays muss natürlich im Z-way erfolgen - nicht direkt im Script! Hier nun nochmal korrekt:

Dein Python-Script gibt [0, "on"] (exit-, return-value) zurück. Du brauchst "on", also Wert [1]. Im Z-Way-Frontend setzt Du deshalb im Code Device folgendes ein:

Code to get value:

Code: Select all

system("...Scriptaufruf...")[1];
Das sollte nun klappen. Viel Erfolg!
Tobus
Posts: 27
Joined: 31 Mar 2017 17:50

Re: Code Device - Code to get value (Return Werte)

Post by Tobus »

Jetzt macht es Sinn, Danke!!! ;)
Post Reply