Keine Alarmsignalisierung auf Android

Hi Leute,
Heute hatte ich mal einen unerwarteten Praxistest für meine eigerichtetten Alarme.
Leider musste ich dabei feststellen, dass die Alarm Notifikation auf Android NICHT funktioniert solange die Fibaro App nicht läuft.

Das ist natürlich voll scheisse, denn die APP braucht, wenn sie geöffnet ist, viel Strom!!

Ich habe im Forum zwar einige ähnlichen Meldungen gefunden, aber keine Lösung.
Wie habt ihr das Problem gelöst??
Muss ich wirklich Pushover nehmen, damit das funktioniert?
Wenn ja, habt ihr ein Beispiel für die richtige Integration?

Oder hat das jemand mir der Standard App zum Laufen gebracht?

Bitte um eure Tipps, denn ohne ALarmsignalisierung macht der ganze Kram wenig Sinn;-(

Hallo,

hier ist eine Pushover Szene:

  • Variable pushStatus anlegen.

Mit folgendem Code kannst Du die Nachrichten triggern. (In deine Szenen einbauen)

fibaro:setGlobal(“pushStatus”, “HEADER,MESSAGE,PRIORITY,SOUND”)
Bsp. fibaro:setGlobal(“pushStatus”, “Fibaro,Alarm im Wohnzimmer,1,siren”)
Bsp. fibaro:setGlobal(“pushStatus”, “Fibaro,Tür offen Schlafzimmer,0,cosmic”)

Hier ist die Szene, app token und user bekommst du von pushbullet wenn du dich registrierst.
Die App ist einmalig pro Betriebssystem zu kaufen. (Wenige Euros)

--[[ 
%% properties 
%% globals 
pushStatus
--]] 

if (tonumber(fibaro:getGlobalValue("pushStatus")) == 0) then
   fibaro:abort();
end

local selfhttp = net.HTTPClient({timeout=2000})
local parameters = fibaro:getGlobalValue("pushStatus") 
local token = "XXX" -- your application token
local user = "XXX" -- your user key

-- -------------------------------------------------------
-- no edit below this point
-- -------------------------------------------------------

function url_encode(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n")
    str = string.gsub (str, "([^%w %-%_%.%~])",
        function (c) return string.format ("%%%02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str	
end

function explode(str)
  	local pos,arr = 0,{}
	  for match in string.gmatch(str, '[^,]+') do
		table.insert(arr, match)  
	  end
    return arr
end
-- 

if string.len(parameters) > 0 then
  --fibaro:setGlobal("pushover","")
  parameters = explode(parameters)
  local title = tostring(parameters[1]) or ""
  local message = url_encode(parameters[2])
  local device = "" 
  local priority = tostring(parameters[3])
  local sound = tostring(parameters[4]) -- see other sounds bellow
  

  local requestBody = "token=" .. token .. "&user=" .. user .. "&title=" .. title .. "&device=" .. device .. "&priority=" .. priority .. "&sound=" .. sound .."&message=" .. message
  --'token=' ..token ..'&user=' ..user ..'&title=FIBARO' ..'&message='..message
  --print(requestBody);

selfhttp:request('https://api.pushover.net/1/messages.json', { 
options={ 
headers = selfhttp.controlHeaders, 
data = requestBody, 
method = 'POST', 
timeout = 5000 
}, 
 
success = function(status) 
local result = json.decode(status.data); 
--print("status"); 

if result.status == 1 then 
	print("successful");
	--print("Request: " ..result.request); 
else 
	print ("failed");
	print(status.data); 
end 
end, 
error = function(error) 
print "ERROR" 
print(error) 
end 
})
     fibaro:setGlobal("pushStatus", "0")
end

--pushover - Pushover (default)
--bike - Bike
--bugle - Bugle
--cashregister - Cash Register
--classical - Classical
--cosmic - Cosmic
--falling - Falling
--gamelan - Gamelan
--incoming - Incoming
--intermission - Intermission
--magic - Magic
--mechanical - Mechanical
--pianobar - Piano Bar
--siren - Siren
--spacealarm - Space Alarm
--tugboat - Tug Boat
--alien - Alien Alarm (long)
--climb - Climb (long)
--persistent - Persistent (long)
--echo - Pushover Echo (long)
--updown - Up Down (long)
--none - None (silent)

Man kann sich einfach eine normale Push-Mitteilung zusenden. Wozu soll man in diesem Fall einen anderen Dienst nutzen?

Gruß

Danke mdietinger für diesen Tipp. Kann das für einige meiner Skripte sehr gut brauchen und werde es probieren!
Die Lösung ist allerdings für Signalisierung von Zuständen die aus LUA Skripten kommen.
Dort klappt das eh auch über die Push Funktion von Fibaro, wie Boomx richtig gesagt hat.
Zumindest meistens :wink:

Ich habe das Problem dass die Alarme vom Alarmpanel der HC2 nicht ausgelöst werden wenn die Software nicht läuft, DAS war die Problematik!
Ich fürchte da hilft dein Skript auch nicht, wenn ich das richtig verstanden habe, oder ??

Im Alarmpanel kannst du eine Szene bei Alarm triggern. (neue Szene)
Entweder nur die pushStatus Variable ändern, oder eine Schleife über alle Melder laufen lassen und dann über PO melden welcher Melder ausgelöst wurde.
Das schöne mit PO ist der Log der Meldungen, verschiedene Prioritäten und Sounds und das sie innerhalb von Sekunden verlässlich zugestellt werden.
Über PO gibt es auch die Möglichkeit die Meldungen mit höchster Priorität alle x Sekunden anzuzeigen bis die Meldung quittiert wurde.
Das habe ich aber noch nicht getestet.

Man kann sich einfach eine normale Push-Mitteilung zusenden. Wozu soll man in diesem Fall einen anderen Dienst nutzen?
Schon mal Pushover getestet und die Funktionen mit Fibaro Push verglichen?

Nö… Hier geht es um eine einfache Benachrichtigung im Alarmfall. Wozu ich da dann Pushover nutzen soll, erschließt sich mir nicht. (Unabhängig von anderen Funktionen.)

Je mehr man andere Online-Dienste nutzt, desto fehleranfälliger wird das System. Wenn die Server von Pushover nicht laufen, dann bekommst du halt keine Benachrichtigung. Klar, können die Server von Apple auch ausfallen. Denke aber, dass diese eine hohe Verfügbarkeit haben, als Pushover.

Gruß

Hallo Ihr Lieben,
Ich bin sehr dankbar für eure Infos und werde mir Pushover sicher bald mal ansehen. Speziell deshalb weil ich auf unterschiedliche Alarmtöne stehe :wink:

Ich bin trotzdem auch bei boomx, denn die Funktion einen Alarm an die Fibaro App auf das Android Handy zu schicken sollte eigentlich mit den Boardmitteln gehen. Und da ich noch nicht so gut im LUA programmieren bin, versuche ich halt einfach die bestehenden Funktionen zu nutzen, wenn sie schon mal da sind.

Die Frage ist also ob jemand von euch meldungen aus dem Alarmpaneel bekommt, wenn die Fibaro App am Handy nicht läuft?
Denn wenn nicht, dann hat die App vielleicht einen Bug.

Frage @mdietinger:
Habe ich das richtig verstanden, dass Pushover die Nachrichten irgendwo speichert und man dort dann nachsehen kann, falls man eine Nachricht am Handy übereifrig wegdrückt?

pblacky,
für Pushover musst du eine App installieren.
Diese App läuft automatisch im Hintergrund, habe aber keinen erhöhten Stromverbrauch feststellen können.
Push Nachrichten erscheinen wie andere Pushnachrichten und eine komplette History ist in der App ersichtlich.
Bin auch der Meinung dass Alarme und Nachrichten verlässlich von Fibaro geliefert werden sollten.
Aber die Verlässlichkeit ist für mich zur Zeit nicht gegeben. (Und auch wenn sie nun gegeben wäre, habe ich die Vorzüge der Drittsoftware zu schätzen gelernt)

Kann aber den Hinweis auf erhöhte Fehleranfälligkeit mit Fremd Diensten von Boomx nicht nachvollziehen.
Nur durch PO war es mir möglich verlässliche Nachrichten von HC2 zu bekommen.
Alarme von der Fibaro app funktionieren bei mir nur wenn ich die App in den Vordergrund nehme.
App im Hintergrund == keine Alarmierung bei meinem Handy (Android Galaxy S5)
Weiters funktionierte Push auf mein Handy die meiste Zeit nicht.
Kann vielleicht mit meinem Endgerät zu tun haben, aber wenn ich mir im Forum ansehe wie oft User bezüglich Push mit diversen SW Versionen Probleme hatten dann muss ich mich schon Fragen ob ich und andere User auf Notifications und Alarme von Fibaro verlassen können.
Klar ist es besser alles aus einer Hand zu bekommen, aber Sorry die erhöhte Zuverlässigkeit gegenüber Drittanbietern sehe ich nicht.
Weiters ist anzumerken das es in letzter Zeit doch einige Male zu einer Nichtverfügbarkeit des Fibaro Webzugriffes gekommen ist. (Fibaro App hat keine Verbindung, somit kein Alarm)
Wenn einem wirklich an der Verlässlichkeit des Systems gelegen ist wird wahrscheinlich mehrere Notifikation Möglichkeiten in Betracht ziehen.
Bei mir ist das Email und PO push. (Emails kommen in der Regel einige Minuten später an)
Ob PushOver oder andere Dienste ist jedem Selber überlassen.
Habe mir PushOver nur wegen dem Preis-Leistungsverhältnis genommen.

Danke mdietlinger für die ausführliche Antwort!!
Ich habe auch schon bemerkt, dass Push und Emails aus der Fibaro Anlage NICHT immer zuverlässig funktionieren, daher werde ich jetzt parallel mit Pushover beginnen.
Ich hoffe ich darf fragen, falls ich noch was brauche ?

Kein Problem, unbedingt in der Pushover Szene und der neuen Alarmszene erlauben das sie im Alarmfall ausgeführt werden dürfen.
Bei PushOver gibt es eine Möglichkeit die App zu testen.
Ohne Freischaltung gehen aber nur einige wenige Nachrichten.

Gibt es dein ALARM Skript irgendwo hier im Forum zu sehen?
Ich hab schon ein Script für die Aktivierung mit meinem Riegelkontakt laufen (Siehe hier).
Vielleicht gelingt es mir dieses um die Alarmsignalisierung zu erweitern …
Wobei ich derzeit etwas überfordert bin mit der LUA Programmierung, aber ich übe fast täglich mich darin zu verbessern :wink:

Anbei ein Beispiel wie es aussehen könnte.
Alarmpannel löst unten genannte Szene aus und sendet eine Information über Alarm ausgelöst und für jeden offenen Kontakt eine eigen Message.

--[[
%% properties
%% events
%% globals
--]]
  local DoorID = {xx,xx,xx,xx} -- IDs der Sensoren die überwacht werden sollen
  local countID = 50

fibaro:setGlobal('pushStatus', 'HC2 ALARM !!!, ALARM ausgelöst !!!!,1,siren')
  for j=1, countID do
    if DoorID[j] ~= nil then
      if (tonumber(fibaro:getValue(DoorID[j], 'armed')) == 1) then
	  	  if (tonumber(fibaro:getValue(DoorID[j], 'value')) == 1) then
			local sensorname = fibaro:getName(DoorID[j])
			local sensorroom = fibaro:getRoomNameByDeviceID(DoorID[j])
			fibaro:sleep(1000)	
        	fibaro:debug('pushStatus HC2 ALARM !!!,'.. sensorname .. ' im Raum: ' .. sensorroom .. ' offen'..',1,siren')        
        	fibaro:setGlobal('pushStatus', 'HC2 ALARM !!!,'.. sensorname .. ' im Raum: ' .. sensorroom .. ' offen'..',1,siren')
			
		  end
		end
    end
end

Ok, habe jetzt mal gestartet!
Pushover ist eingerichtet, habe den User Key von der Webseite bekommen und eingetragen.
Musste eine API generieren um den Token zu bekommen. Habe “Applicatopn” gewählt (siehe Anhnag)

Habe die beiden Zeichenketten so in dein Beispiel Skript eingetragen und es in meiner HC2 aktiviert:

local token = "a...........r" -- your application token
local user = "u............e" -- your user key

AN den ANfangszeichen kann man sie zu den Screenshots zuordnen, ist das richtig?

Ich frage deshalb weil mein Testscript:
fibaro:setGlobal('pushStatus', 'HC2 ALARM !!!, ALARM ausgelöst !!!,1,siren')
noch keine Push Nachricht auslöst, irgendwas ist also noch nicht richtig ???

2016-11-04-11_Pushover-API.jpg

2016-11-04-09_01_13-Pushover_-Demo.jpg

Variable pushStatus ist angelegt?
Hast Du schon versucht direkt aus der PO Weboberfläche eine Nachricht zu senden?

Bitte auch Debug in der Szene aktivieren un kontrollieren ob Szene getriggert wird und wo der Fehler liegt

Die Variable hab ich angelegt, wenn ich mein Testskript ausführe wird sie auch richtig befüllt!

Eine Pushover Nachricht von der Webseite hab ich verschickt, DAS funktioniert.

Wie ich den Pushover zum Test auslösen kann, hab ich noch nicht geschnallt.
Reich es mit setzen der Variable wie hier:
fibaro:setGlobal('pushStatus', 'HC2 ALARM !!!, ALARM ausgelöst !!!,1,siren')
Oder brauch ich da nochwas ?

Habe übrigens in deinem Skript alle “–” bei den Debug Anweisungen weggetan um dieese zu aktivieren.
Hat allerdings nichts geändert.
Was soll den mit print(requestBody); passieren?
Ist das nur die Ausgabe der Variable an die Debug Konsole ?

Hab offensichtlich in meiner Unwissenheit, den Aufwand dieses “werd ich mal kurz ausprobieren…” etwas unterschätzt :wink:
Ist doch etwas komplizierter als ich dachte …

Genau.
Wenn Du sie änderst wird die die Pushover Szene mit dem Variablen Trigger ausgeführt:

--[[ %% properties %% globals pushStatus --]] ...... .....

Ist die Variable mit Text befüllt wird die Szene ausgeführt. (Bei “0” wird sie abgebrochen, damit wird die Variable nach ausführen von Skript zurückgesetzt)

requestBody sollte dir die URL liefern welche an Pushover gesendet wird.
Zusätzlich solltest Du sehen ob die Nachricht erfolgreich gesendet wurde.
Hast Du App und User Key eh unter Anführungszeichen gesetzt? (Sonst geht das nicht.

App & Key in ANführungszeichen, wie in deinem Beispiel:

local token = "47110815asdfjklo" -- your application token
local user = "47110815asdfjklo" -- your user key

Schön langsam verzweifle ich an dem Ganzen ;-(

Ich habe nun versucht einige Debugs einzubauen, es sieht so aus als wäre die Variable immer leer !? (siehe Anhang)

Variable1.jpg

Variable.jpg

Du musst die Variable zuerst einlesen bevor du sie Anzeigen kannst:

z.B. fibaro.debug(fibaro:getGlobalValue(“pushStatus”) )

In der PushStatus Szene kannst du parameters debugen, die sollte dann den gleichen String beinhalten.

Im Variablen Pannel wird sie immer 0 sein, da Sie nur kurzzeitig einen anderen Wert hat.
Aber ändere sie mal auf z.B. 1, das sollte wieder auf 0 gesetzt werden wenn PushStatus ausgeführt wird.