Firtzbox Push, HC2

Hallo,
kann hier jemand einem Anfänger erklären, wie ich mir bei Anruf eine Pushmitteilung zusenden kann.

Das Fritz VD usw. läuft bei mir. Also es werden die Anrufe angezeigt. Nun würde ich gerne eine Pushmitteilung bekommen, wenn jemand anruft. Vielen Dank schon einmal für die Hilfe.

Bezugnehmend auf diesen Artikel:
https://www.siio.de/fritzbox-integration-homecenter-2/

Einfach in untenstehendem Code Teil den Fett markierten Text einfügen. (DEVICE_ID ändern)

	if(msg[2]=="RING") then
  		fibaro:call(thisdevice, "setProperty", "ui.Number.value", " " .. msg[4]);
  		fibaro:debug(msg[2])
  		fibaro:setGlobal("FritzBoxTelNr", msg[4])
  		<strong>local message = msg[4] .." ruft an"
        fibaro:call([DEVICE-ID],  "sendPush", message)</strong>
	end

Hallo “mdietinger”,

vielen Dank… geht alles.

Hallo, ich glaube ich bin etwas mehr Anfänge als “marcbore”, denn ich bekomm nichts zum Laufen.
Alles was ich möchte, ist Bei Anruf, egal von wem, eine Szene zustarten.

Die Mainloop Schleife sieht so aus:

local thisdevice = fibaro:getSelfId();
local ip = fibaro:getValue(thisdevice, 'IPAddress');
local port = fibaro:getValue(thisdevice, 'TCPPort');
local loopCount = 0;

fibaro:debug("Start");
tcpSocket = Net.FTcpSocket(ip, port);
tcpSocket:setReadTimeout(60000); 
result, err = tcpSocket:write("r\n");
while (err<2) do
    result, err = tcpSocket:read();
  	result = string.upper(result or string.char());
  	if(result~="") then
    	fibaro:debug(result);
    	local msg={} ; i=1
        for str in string.gmatch(result, "([^;]+)") do
                msg[i] = str
                i = i + 1
        end
  		fibaro:call(thisdevice, "setProperty", "ui.Action.value", msg[2]);
		fibaro:setGlobal("FritzBoxStatus", msg[2])
    	--fibaro:setGlobal("FritzBoxTelNr", msg[4])
    		
    
    	if(msg[2]=="CALL") then
    		fibaro:call(thisdevice, "setProperty", "ui.Number.value", msg[6]);
      	end
    	if(msg[2]=="RING") then
      		fibaro:call(thisdevice, "setProperty", "ui.Number.value", " " .. msg[4]);
      		fibaro:debug(msg[2])
      		fibaro:setGlobal("FritzBoxTelNr", msg[4])
    	end
       	fibaro:call(thisdevice, "setProperty", "ui.DateTime.value", msg[1]);
    	fibaro:startScene(106) --Startet die Fritzbox-Szene zur Reduzierung der Sonos-Lautstärke
  	end
	loopCount=loopCount+1;
  	if (loopCount==60) then -- approx 1 hour
    	err=1234
  	end;
end
fibaro:debug("Closing Connection");
tcpSocket:disconnect();
fibaro:sleep(2500);
fibaro:debug("Exit Code=" .. err);
fibaro:debug("Loop=" .. loopCount);

Die eingehende Anrufe Szene schaut so aus:

--[[
%% properties
%% events
%% globals
--]]

--Szene wird direkt durch das Fritzbox-VD getriggert 
--Die GVs werrden durch den manuellen Start der Szene angelegt
--Folgende GV werden benötigt und automatisch angelegt: 
--FritzBoxAnsage, FritzBoxTelNr, FritzBoxStatus, 
--GV "FritzBox...." werden aus dem Fritzbox-VD befüllt 
--Standard-GV des Sonos-Commanders werden benötigt

local Zulaut = 25  --Lautstärkewert, ab den die Lauststärke reduziert wird
local Leiser = 10  --Auf diesen Wert wird die Latstärke reduziert
local SonosCommander = 206 -- ID des Sonos Commanders in der Küche

local Oma = 01732763450
local OmaAnsage = "Fritz-nas/fritz.nas/Evanescence - Lost in Paradise.mp3"
local Chris = 01732763450
local ChrisAnsage = "Fritz-nas/fritz.nas/Evanescence - Lost in Paradise.mp3" 
local currentDate = os.date("*t")

local var = {"FritzBoxAnsage", "FritzBoxTelNr", "FritzBoxStatus"} --benötigte GV
local Ansage = tonumber(fibaro:getGlobalValue("FritzBoxAnsage"))	--aktiviert die Ansage; 0 (Aus) oder 1 (Ein) 
local maxID = 1000

fibaro:debug(fibaro:getGlobalValue("FritzBoxStatus"))
fibaro:debug("Tel: "..fibaro:getGlobalValue("FritzBoxTelNr"))
fibaro:debug("Ansage-Status: "..Ansage)

if fibaro:countScenes() > 1 then
  fibaro:debug("stop scene");
  fibaro:abort();
end

if (tostring(fibaro:getGlobalValue("FritzBoxStatus")) == "RING") then
	fibaro:debug("Eingehender Anruf")
  	
 --prüft bei eingehenden Anruf die Nummer uns "sagt" Anrufernamen über Sonos an 
  	if Ansage == 1 then 
   	fibaro:debug("Ansage aktiv") 
     if (tonumber(fibaro:getGlobalValue("FritzBoxTelNr")) == Oma 
    	and (currentDate.wday == 1 or currentDate.wday == 7))  -- hier nur am Sa und So
    	then
    	fibaro:setGlobal("SONOS_MUSIC", OmaAnsage)
		fibaro:call(SonosCommander, "pressButton", "2") -- Music-Button vom Commander
     	fibaro:debug("Oma Anruf")
     elseif (tonumber(fibaro:getGlobalValue("FritzBoxTelNr"))) == Chris
    	then
    	fibaro:setGlobal("SONOS_MUSIC", ChrisAnsage)
		fibaro:call(SonosCommander, "pressButton", "2") -- Music-Button vom Commander
     	fibaro:debug("Chris Anruf")
     else fibaro:debug ("keine Nummer hinterlegt")
    end
    end     
   
 -------Sonos leiser stellen 
  	for id = 1, maxID do
    local deviceType = fibaro:getType(id)
    if (deviceType == 'com.fibaro.sonosSpeaker') then
        if (tonumber(fibaro:getValue(id, "volume")) >= Zulaut) then
    	   fibaro:debug("Telefon klngelt und "..fibaro:getName(id).." ist zu laut")  
 	       fibaro:call(id,"setVolume", tonumber(Leiser))
           fibaro:debug(fibaro:getName(id).." leiser gestellt") 
          --local room = fibaro:getRoomNameByDeviceID(id) 
        else
   		fibaro:debug("Teelfon klingelt, "..fibaro:getName(id).." ist nicht zu laut")
      	end
    end
    end
end

-- Funktion zum Anlegen einer Globalen Variablen
function globalVar(var,val)
  local http = net.HTTPClient()
  http:request("http://127.0.0.1:11111/api/globalVariables", {
    options = {
    method = 'POST',
    headers = {},
    data = '{"name":"'..var..'","value":"'..val..'"}',
    timeout = 10000
  },
  success = function(response)
            local result = response.data;
            if response.status == 200 or response.status == 201 then
              fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
            else
              fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
            end
            end,
  error = function(err)
          fibaro:debug('[ERROR] ' .. err)
          end
  })
end

local trigger = fibaro:getSourceTrigger()

if (trigger['type']=='other') then
  --fibaro:debug("Script manuell gestartet; GV werden geprüft")
  for i = 1,#var do    
	if (fibaro:getGlobal(var[i]) ~= nil) then
    --fibaro:debug('Benötigte Variable ' ..var[i].. ' vorhanden.')
  		if (fibaro:getGlobal(var[i]) == 'NaN') then
    	--fibaro:debug('Inhalt: ' ..fibaro:getGlobal(var[i]).. ' erkannt. Wird korrigiert.')
    	fibaro:setGlobal(var[i], '0') end  
  	else
    	--fibaro:debug('Benötigte Variable ' ..var[i].. ' NICHT erkannt. Wird erstellt....')
    	globalVar(var[i], '0')
  	end	
 end
end

Der manuelle Start der Szene wird abgebrochen mit:
[DEBUG] line29: attempt to concatenate a nil value

Wo muss ich was schrauben, damit die nötigen Variablen angelegt werden und bei einem Anruf, egal von welche Nummer, die Szene 106 gestartet wird?

Vielen Dank euch schon mal!

Hi,

kommentiere bitte die Zeile 28-30 in der eingehende-Anrufe-Szene einmal mit vorangestellten – (2x Minuszeichen) aus, abspeichern und dann Szene manuell starten.
Dann sollte sie durchlaufen und anschließend kannst du den Debug wieder reinnehmen.

VG Hoggle

Hallo zusammen!

Coole Sache. Aber leider funktioniert es nicht bei mir.
Ich habe das VD für meine Fritzbox angelegt und den entsprechenden Code in die Main loop kopiert und um den oben genannten fett gedruckten Code ergänzt und die Device-ID angepasst.
Ebenso habe ich die entsprechende Scene angelegt. Beim erstmaligen Laufen die Zeilen 28-30 auskommentiert und danach wieder geändert.
Ein Debug des main loop bringt folgendes Ergebnis (alle 2-3 Sekunden):
[DEBUG] 10:55:52: Start
[DEBUG] 10:55:52: Closing Connection
[DEBUG] 10:55:55: Exit Code=2
[DEBUG] 10:55:55: Loop=0

Auch wenn meine Fritzbox angerufen wird.

Eigentlich möchte ich nur eine Push-Nachricht erhalten wenn jemand die Fritzbox anruft.
Eine Sonos-Anlage habe ich nicht.

Kann mir bitte jemand helfen was ich verkehrt mache?

Kann mir

Hi,

also der Debug sieht nicht falsch aus.
Im VD war im Mainloop Code vorhanden, weswegen nur der Austausch notwendig ist
Hast Du den CallMonitor in der Fritzbaox aktiviert?

VG Hoggle

Hallo,

ich stelle mich auch etwas “blöd” an… Ich habe keine Sonos, möchte aber einfach nur eine Message auf meinen vu+ und eine Push aufs Handy bekommen, wenn jemand anruft… Könnte mir jemand bei der Scene behilflich sein?

Vielen lieben Dank!

Hi,

eine mögliche Lösung findest Du oben im Post Nr. #48615

VG Hoggle

Der Debug ist nicht richtig, sonst würde nichts alle 2,3 Sekunde debuggt. Das Skript springt aus der Schleife, weil irgendwas mit der Konfiguration der Fritzbox nicht richtig ist.

Gruß

Hallo Hoggle,

die Lösung aus #48615 funktioniert aber nicht… Da erscheint im Debug immer ne Fehlermeldung… Kann man nicht einfach eine Message-Scene anstelle der Sonos-Szene starten, die mir eine Info über den Anruf schickt?

VG

Ja,klar.
Aber warum funktioniert es nicht bzw. was genau?

Dann erscheint dort folgende Fehlermeldung…

Error.jpg

Falsche Zeichen kopiert…

Aber nochmal:

Selbst das andere Skript funktioniert bei nicht. Der Debug muss anders aussehen. Es wird hier zu Problemen mit deiner Fritzbox-Konfiguration kommen.

Gruß

Ja, das war das Problem… Jetzt funktioniert die Pushnachricht…! Danke! Der obere Debug war nicht von mir…

Sorry, nicht drauf geachtet :frowning:

Trotzdem, vielen Dank für deine Hilfe!!! :slight_smile:

So, jetzt funktioniert es auch bei mir.
Es lag tatsächlich am CallMonitor. Dieser war nicht aktiviert.
Mein Fehler wa das ich immer wieder probiert hatte den CallMonitor mit der “FritzFon-App” zu aktivieren. (Bekam aber nie dabei eine Rückmeldung in der App).
Jetzt habe ich mir diese Woche ein Fritzfon gekauft, angeschlossen und den CallMonitor aktiviert (diesmal mit Rückmeldung im Display vom Fritzfon).
Vielen Dank für den Hinweis, Hoggle!!

Hallo,

wenn ich den Text anfüge:

local message = msg[4] …" ruft an"
fibaro:call([DEVICE-ID], “sendPush”, message)

Dann erhalte ich folgende Meldung beim Debug:
[ERROR] 15:15:53: line 34: unexpected symbol near ‘[’

Jemand eine Idee :frowning:

Dann habe ich noch eine Frage um den CallMonitor zu aktivieren, brauche ich ein Fritzfon?! Ich habe nur die APP für iOS, weil ich kein Telefon sonst zu Hause habe?!

Die Anführungszeichen sind falsch. Diese müssen durch " ersetzt werden.

https://www.janrufmonitor.de/ueberwachung-freischalten/

Gruß