VU+ Push Message

Hallo zusammen,
komme hier nochmal auf mein Problem mit den Push Nachrichten auf der Vu+ zurück.
Nachdem ich das Script so wie boomx in den Tutorial Kommentaren empfohlen hat, eingefügt hab, bekomme ich leider folgende Fehlermeldung im Debug Fenster:

ERROR 22:45:54: line 43: attempt to call method ‘getselfID’ (a nil value)

Was hat das zu bedeuten? Hier mal das gesamte Scriptzur Durchsicht.Line 43 hab ich mal mit !!! gekennzeichnet.
Könnte mir jemand erklären wo es da klemmt?

Dank euch

–[[
%% properties
26 power
%% globals
–]]

local wallplug = 26 – wallplug
local standby = 3 – Verbrauch, unter dem der Standby-Modus erkannt werden soll
local phone1 = 40 – ID iPad
local phone2 = 38 – ID iPhone Mausi
local phone3 = 37 – ID iPhone Me

if (fibaro:countScenes()>1)
then
fibaro:abort();
fibaro:debug(‘abort’);
end

local run = 0
local counter = 0
local currentDate = os.date(’*t’);
local power = fibaro:getValue(wallplug, “power”)

if ((tonumber(fibaro:getValue(wallplug, “power”)) > 1 ) and run == 0) then
local start = (os.time())
fibaro:debug(‘Waschmaschine ist an…’)
fibaro:debug(‘Verbrauch = ‘…power…’ Watt’)
fibaro:sleep(120*1000);
run = 1
end

while run == 1 do

if (tonumber(fibaro:getValue(wallplug, “value”)) == 1) then
if ((tonumber(fibaro:getValue(wallplug, “power”)) < standby))
then
fibaro:debug(‘Waschmaschine im Standby; zähle counter hoch’);
if (counter == 30) then
fibaro:debug(‘Waschmaschine noch im Standby; 5 min sind vergangen; Versende PushNachricht’);
fibaro:call(phone1, “sendPush”, “Wäsche ist fertig”); – Push Handy
fibaro:call(phone2, “sendPush”, “Wäsche ist fertig”); – Push Handy
fibaro:call(phone3, “sendPush”, “Wäsche ist fertig”); – Push Handy
!!! local selfId = fibaro:getSelfId();
local ip = fibaro:get(selfId, “192.168.178.99”)

local url = “/web/message?text=Waschmaschine%20ist%20fertig!&type=1”

local ws = Net.FHttp(ip, 80)
local resp = ws:GET(url)
fibaro:debug(resp);
end
counter = counter + 1
fibaro:debug(counter)
elseif (tonumber(fibaro:getValue(wallplug, “power”)) > standby)
then
fibaro:debug(‘Waschmaschine wieder an; counter resettet’);
counter = 0
end
elseif (tonumber(fibaro:getValue(wallplug, “value”)) == 0) then
fibaro:debug(“Waschmaschine aus… Abort scene”)
run = 0
counter = 0
end
fibaro:sleep(10*1000)
end

Hi,

das Skript funktioniert nur in dem VD.

Das heißt, dass du in der Szene den Button des VDs drücken musst :wink:

Gruß

Danke boomx,
das ergibt natürlich auch Sinn. Könntest du mir noch den Befehl zum Button drücken verraten? Muss eigentlich dort wo “IPAdress” steht die IP der VU+ rein oder bleibt es so?

Vielen Dank

Hi,

die IP-Adresse holt er sich oben aus dem Feld. Der Knopf wird in LUA so gedrückt:

fibaro:call(ID, “pressButton”, “ButtonID”)

Die ID des Button am Besten über die API oder über eine Blockszene ermitteln.

Gruß

Astrein, läuft vielen Dank!!!

Nun bräuchte ich nur nochmal bei dem Stehlampen Script unterstützung :wink:

local selfId = fibaro:getSelfId()
local ip = fibaro:get(selfId, “IPAddress”)
local counter = 0
local answer = 0

local url = “/web/message?text=Lux-Wert%20unter%2050!%20Stehlampe%20einschalten?&type=0&timeout=30”

local ws = Net.FHttp(ip, 80)
local resp = ws:GET(url)

while (counter <= 30 and answer == 0) do
fibaro:sleep(1*1000)
fibaro:debug(counter);
counter = counter + 1
local url2 = “/web/messageanswer?getanswer=now”
local ws2 = Net.FHttp(ip, 80)
local resp2 = ws2:GET(url2)
–KEINE ANTWORT GEKOMMEN
a, b = string.find(resp2,“Keine rechtzeitige Antwort”)
if (a == nil and b == nil) then
fibaro:debug(‘a & b == NIL’)
else
response_false = string.sub(resp2, a, b)
fibaro:debug(response_false)
end
– ANTWORT:JA
c, d = string.find(resp2,“Antwort lautet JA!”)
if (c == nil and d == nil) then
fibaro:debug(‘c & d == NIL’)
else
response_true_yes = string.sub(resp2, c, d)
fibaro:debug(response_true_yes)
answer = 1
end
– ANTWORT: NEIN
e, f = string.find(resp2,“Antwort lautet NEIN!”)
if (e == nil and f == nil) then
fibaro:debug(‘e & f == NIL’)
else
response_true_no = string.sub(resp2, e, f)
fibaro:debug(response_true_no);
answer = 1
end
end
– COUNTER ABGELAUFEN oder ANTWORT ERFOLGT
if (answer == 1) then
– ANTWORT ERFOLGT
fibaro:debug(‘Antwort erfolgt’)
else
– COUNTER IST ABGELAUFEN. ALTERNATIVE?
fibaro:debug(‘COUNTER OFF’);
end

Um den Button des Virtuellen Devices zu nutzen, müsst Ihr folgende Zeilen anpassen:

Zeile 6: Message, welche geschickt werden soll + den Counter, wie lange die Nachricht angezeigt werden soll (timeout)
Zeile 11: Counter an timeout angleichen
Zeile 32: Aktion, welche bei Antwort JA ausgeführt werden soll
Zeile 41: Aktion, welche bei Antwort NEIN ausgeführt werden soll
Zeile 51: Aktion, welche beim Verstreichen der TimeOut-Zeit angewendet werden soll

Was ich noch nicht ganz verstehe ist, ob Zeile 32 & 41 einfach durch
fibaro:call(ID, “turnOn”);
ersetzt wird oder muss das integriert werden? Wenn ja wie muss das aussehen?
Nehme mal an das wenn in Zeile 51 nicht verändert wird, nach verstreichen der Zeit nix passiert.

Gruss

Hi, genau. Einfach ersetzen und wenn du nicht reagierst und du nichts machen möchtest, dann einfach alles in Zeile 51 zu lassen.