Fritz!Box Plugin
Moderator: RdP
Fritz!Box Plugin
Ik heb lang zitten zoeken maar kon geen plugin vinden voor Homeseer.
Enige optie die overblijft is dan maar zelf een te bouwen.
Wie heeft er belangstelling en of interesse om gezamenlijk een plugin te bouwen?
Enige optie die overblijft is dan maar zelf een te bouwen.
Wie heeft er belangstelling en of interesse om gezamenlijk een plugin te bouwen?
Fritz!Box Plugin
Ik heb zeer zeker belangstelling voor een Fritz!Box plugin. Zie mijn eerdere berichten op dit forum. Alleen weet ik niet of ik de tijd heb om aktief te bouwen....
Fritz!Box Plugin
Eerdere discussie over call monitoring op de Fritz!Box is hier te vinden:
http://www.domoticaforum.eu/topic.asp?TOPIC_ID=209
http://www.domoticaforum.eu/topic.asp?TOPIC_ID=209
- RDNZL
- Forum Moderator
- Posts: 1008
- Joined: Sun Sep 24, 2006 1:45 pm
- Location: Dordrecht, The Netherlands
- Contact:
Fritz!Box Plugin
Volgens mij is de layout van de call string op de telnet poort veranderd sinds de upgrade.
DomotiGa geeft een parse error bij binnenkomende calls, moet dit nog even onderzoeken/fixen.
Regards,
Ron.
DomotiGa geeft een parse error bij binnenkomende calls, moet dit nog even onderzoeken/fixen.
Regards,
Ron.
Fritz!Box Plugin
Ron,
Is het mogelijk dat ik een deel van je source kan ontvangen (na de aanpassingen).
Ik wil dan kijken of ik deze kan ombouwen naar een plugin.
gr
Enver
Is het mogelijk dat ik een deel van je source kan ontvangen (na de aanpassingen).
Ik wil dan kijken of ik deze kan ombouwen naar een plugin.
gr
Enver
- RDNZL
- Forum Moderator
- Posts: 1008
- Joined: Sun Sep 24, 2006 1:45 pm
- Location: Dordrecht, The Netherlands
- Contact:
Fritz!Box Plugin
Ja tuurlijk, al mijn code staat op domotiga.nl, maar de frixzbox code is daar nog niet helemaal uptodate, dus hierbij.
Opmerkingen, ik gebruik de mysql table layout van asterisk cdr, en de onderstaande code werkt niet goed met de laatste update dus, ik moet wat aan die Scan() routines aanpassen vermoed ik.
Tis allemaal zeer beta, maar deed was het moest doen.
Opmerkingen, ik gebruik de mysql table layout van asterisk cdr, en de onderstaande code werkt niet goed met de laatste update dus, ik moet wat aan die Scan() routines aanpassen vermoed ik.
Tis allemaal zeer beta, maar deed was het moest doen.
Code: Select all
' Gambas class file
' Description:
' FritzBox.class
' Provide support for Fritz!Box call monitoring. (via call log port)
' Development Status:
' Just started to build this one.
' Incoming call detection and Voicebox status implemented.
' Tested with Fritz!Box 7170 Annex A running Firmware 58.x.57
' DomotiGa - an open source home automation program.
' Copyright(C) 2008 Ron Klinkien
' Read file called COPYING for license details.
PROPERTY TCPHost AS String
PROPERTY FritzBoxDebug AS Boolean
PRIVATE sTCPHost AS String
PRIVATE bFritzBoxDebug AS Boolean
PUBLIC hFritzBox AS NEW Socket
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' connect to the host:port
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PUBLIC FUNCTION Connect() AS Boolean
' try to close the connection
TRY hFritzBox.Close
' get a new one
hFritzBox = NEW Socket AS "FritzBox"
hFritzBox.Connect(sTCPHost, 1012)
' all ok
RETURN TRUE
CATCH ' some errors
Main.WriteLog("Fritz!Box Error: " & ERROR.Text)
RETURN FALSE
END
PUBLIC SUB FritzBox_Ready()
Main.WriteLog("Fritz!Box TCP socket connected.")
END
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' disconnect from the host
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PUBLIC FUNCTION Disconnect() AS Boolean
' try to close the connection
TRY hFritzBox.Close
Main.WriteLog("Fritz!Box TCP socket port close.")
' all ok
RETURN TRUE
CATCH ' some errors
Main.WriteLog("Fritz!Box Error: " & ERROR.Text)
RETURN FALSE
END
PRIVATE SUB ParseLine(sStr AS String)
DIM aScan AS String[]
DIM rResult AS Result
DIM iId AS Integer
' 20.01.09 20:29:10;RING;0;XXXXXXXXX;;POTS;
IF InStr(sStr, ";RING;") THEN
aScan = Scan(sStr, "*;RING;*;*;;*;")
IF Main.bFritzBoxDebug THEN
Main.WriteDebugLog("[Fritz!Box] Incoming call from " & aScan[2] & " on line " & aScan[3])
END IF
' write data to cdr table
Main.hDB.Begin()
rResult = Main.hDB.Create("cdr")
rResult!calldate = Now()
rResult!clid = aScan[2]
rResult!src = aScan[2]
rResult!dcontext = "incoming"
rResult!channel = aScan[3]
rResult!disposition = "NO ANSWER"
rResult.Update()
Main.hDB.Commit()
END IF
' 20.01.09 20:29:19;CONNECT;0;0;XXXXXXXXX;
IF InStr(sStr, ";CONNECT;") THEN
aScan = Scan(sStr, "*;CONNECT;*;*;*;")
IF Main.bFritzBoxDebug THEN
Main.WriteDebugLog("[Fritz!Box] Call to/from " & aScan[3] & " answered")
END IF
rResult = Main.hDB.Exec(Subst("SELECT * FROM cdr WHERE clid = &1 ORDER BY calldate DESC LIMIT 1", aScan[3]))
IF rResult THEN
IF rResult.Count THEN
iId = rResult!id
rResult = Main.hDB.Exec("UPDATE cdr SET disposition = 'ANSWERED', calldate = &1 WHERE id = &2", Now(), iId)
END IF
END IF
END IF
' 20.01.09 20:50:11;DISCONNECT;0;1253;
IF InStr(sStr, ";DISCONNECT;") THEN
aScan = Scan(sStr, "*;DISCONNECT;*;*;")
IF Main.bFritzBoxDebug THEN
Main.WriteDebugLog("[Fritz!Box] Call duration was " & aScan[2] & " seconds")
END IF
rResult = Main.hDB.Exec("SELECT * FROM cdr ORDER BY calldate DESC LIMIT 1")
IF rResult THEN
iId = rResult!id
rResult = Main.hDB.Exec("UPDATE cdr SET duration = &1, billsec = &1 WHERE id = &2", aScan[2], iId)
END IF
END IF
' 20.01.09 22:28:50;CALL;0;0;;0XXXXXXXXX;POTS;
IF InStr(sStr, ";CALL;") THEN
aScan = Scan(sStr, "*;CALL;*;*;*;*;*;")
IF Main.bFritzBoxDebug THEN
Main.WriteDebugLog("[Fritz!Box] Outgoing call to " & aScan[4] & " with line " & aScan[5])
END IF
' write data to cdr table
Main.hDB.Begin()
rResult = Main.hDB.Create("cdr")
rResult!calldate = Now()
rResult!clid = aScan[4]
rResult!dst = aScan[4]
rResult!dcontext = "default"
rResult!channel = aScan[5]
rResult!disposition = "NO ANSWER"
rResult.Update()
Main.hDB.Commit()
END IF
END
PUBLIC SUB FritzBox_Error()
' handle error
SELECT CASE hFritzBox.Status
CASE Net.CannotCreateSocket
Main.WriteLog("Fritz!Box: The system does not allow to create a socket.")
CASE Net.HostNotFound
Main.WriteLog("Fritz!Box: Host not found.")
CASE Net.ConnectionRefused
Main.WriteLog("Fritz!Box: Unable to connect. Connection refused.")
CASE Net.CannotRead
Main.WriteLog("Fritz!Box: Error reading data.")
CASE Net.CannotWrite
Main.WriteLog("Fritz!Box: Error writing data.")
END SELECT
END
PUBLIC SUB FritzBox_Read()
DIM sData AS String
IF hFritzBox.Status = Net.Connected THEN
LINE INPUT #hFritzBox, sData
IF Main.bFritzBoxDebug THEN Main.WriteDebugLog("[Fritz!Box] " & sData)
ParseLine(sData)
END IF
END
' implement properties
PRIVATE FUNCTION TCPHost_Read() AS String
RETURN sTCPHost
END
PRIVATE SUB TCPHost_Write(Value AS String)
sTCPHost = Value
END
PRIVATE FUNCTION FritzBoxDebug_Read() AS Boolean
RETURN bFritzBoxDebug
END
PRIVATE SUB FritzBoxDebug_Write(Value AS Boolean)
bFritzBoxDebug = Value
END
Fritz!Box Plugin
Ron, als je binnenkort last van hijgers krijgt...
- RDNZL
- Forum Moderator
- Posts: 1008
- Joined: Sun Sep 24, 2006 1:45 pm
- Location: Dordrecht, The Netherlands
- Contact:
Fritz!Box Plugin
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><i>Originally posted by Digit</i>
<br />Ron, als je binnenkort last van hijgers krijgt...
<br />Ron, als je binnenkort last van hijgers krijgt...
Fritz!Box Plugin
Thanks..
Fritz!Box Plugin
Kan iemand helpen om de code van Ron naar Vbscript te vertalen?
Fritz!Box Plugin
Enver, waarom in VBScript?
Fritz!Box Plugin
VBscript kan ik via Homeseer aanroepen.
Het lijkt veel op VBscript..
Het lijkt veel op VBscript..
Fritz!Box Plugin
Ik denk dat je beter kunt gaan voor een 'echte' plugin. Wat is dat bij Homeseer, een dll die geladen wordt door HS? en zich zo nestelt in HS? Want als je bovenstaande in een VBScript zou moeten verpakken dan krijg je volgens mij een VBScript die eeuwig runt, want je moet nl. eeuwig een verbinding met de Fritz in stand houden. Kan dat wel? Ik vraag het me af.
Fritz!Box Plugin
Idee is om de eerste periode script 1 keer per 10 min te gaan draaien.
tot dat er een plugin is.
tot dat er een plugin is.
Fritz!Box Plugin
Enver, als het VBScript niet actief is, is er geen verbinding met de Fritz en zul je berichten gaan missen, want vzv ik weet wordt er niks gebufferd door de Fritz. Dus: script niet actief = berichten missen.