Fritz!Box Plugin

Alles m.b.t. de Fritzbox plugin van Robert Hekkers overgenomen door Rien du Pre(DUTCH forum)

Moderator: RdP

User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

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?
flexer
Member
Member
Posts: 61
Joined: Mon Feb 19, 2007 9:13 am
Location: Netherlands

Fritz!Box Plugin

Post by flexer »

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....
flexer
Member
Member
Posts: 61
Joined: Mon Feb 19, 2007 9:13 am
Location: Netherlands

Fritz!Box Plugin

Post by flexer »

Eerdere discussie over call monitoring op de Fritz!Box is hier te vinden:

http://www.domoticaforum.eu/topic.asp?TOPIC_ID=209
User avatar
RDNZL
Forum Moderator
Forum Moderator
Posts: 1008
Joined: Sun Sep 24, 2006 1:45 pm
Location: Dordrecht, The Netherlands
Contact:

Fritz!Box Plugin

Post by RDNZL »

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.
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

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
User avatar
RDNZL
Forum Moderator
Forum Moderator
Posts: 1008
Joined: Sun Sep 24, 2006 1:45 pm
Location: Dordrecht, The Netherlands
Contact:

Fritz!Box Plugin

Post by RDNZL »

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.

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

Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by Digit »

Ron, als je binnenkort last van hijgers krijgt...
User avatar
RDNZL
Forum Moderator
Forum Moderator
Posts: 1008
Joined: Sun Sep 24, 2006 1:45 pm
Location: Dordrecht, The Netherlands
Contact:

Fritz!Box Plugin

Post by RDNZL »

<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...
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

Thanks..
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

Kan iemand helpen om de code van Ron naar Vbscript te vertalen?
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by Digit »

Enver, waarom in VBScript?
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

VBscript kan ik via Homeseer aanroepen.

Het lijkt veel op VBscript..
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by Digit »

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.
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by TANE »

Idee is om de eerste periode script 1 keer per 10 min te gaan draaien.
tot dat er een plugin is.
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Fritz!Box Plugin

Post by Digit »

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.
Post Reply

Return to “Homeseer Fritz!box Plugin Forum”