Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS für Zehnder Comfoair CA350/550, Stork und baugleiche

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Wow, das ging ja fix!
    Mit der Version 0.3 klappt das Setzen bzw. die Rückmeldung der Lüfterstufe nun perfekt.

    Bei der Komforttemperatur ist mir gerade noch aufgefallen, dass offenbar nur ganze Gradschritte verarbeitet bzw. zurückgemeldet werden. Also wenn ich 21,5°C per ETS oder Visu als Komforttemperatur setze kommt als Rückmeldung 21°C.

    Außerdem werden bei jedem Setzen der Kopforttemperatur zusätzlich Ab-/Fort-/Zu-/ und Aussenlufttemperatur mit als Antwort gesendet - was aber aus Usersicht nur ein kosmetisches Problem ist.
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    Kommentar


      #32
      neci Moxa habe ich mir noch nicht angeschaut. Wie gesagt kann ich die Anbindung auch nicht testen, was die Realisierung für mich deutlich schwerer macht. [/QUOTE]

      Für Tests stehe ich gerne zur Verfügung.
      Wenn ich mich richtig erinnere, steht in der Historie, dass die Anbindung schon mal realisiert wurde. Vielleicht findest du heraus, wie das gemacht wurde. Ich könnte dir aber auch den Moxa dafür zusenden.

      Kommentar


        #33
        Ich habe Version 0.4 hochgeladen.

        neci Eine Option für Moxa ist jetzt gegeben: In E2 die IP, in E11 den Port und E10 auf M setzen. Nochmal der Hinweis: Diese Anbindung ist ungetestet.

        mfd Bei der Rückmeldung nach dem Setzen der Komforttemp. habe ich einfach den bereits fertigen "Temperaturen-Abfrage-Block" verwendet, der halt alle Daten liefert. In der 0.4 gehen jetzt auch halbe Gradschritte bei der Komforttemperatur.

        Kommentar


          #34
          Zitat von asto Beitrag anzeigen
          In der 0.4 gehen jetzt auch halbe Gradschritte bei der Komforttemperatur.
          Super. Gerade getestet - klappt einwandfrei!
          Gruß -mfd-
          KNX-UF-IconSet since 2011

          Kommentar


            #35

            Du bist Spitze.... Das Auslesen funktioniert bis jetzt schon mal einwandfrei.

            Kommentar


              #36
              Bin jetzt vom WG plugin auf den LBS gewechselt.
              Vielen Dank für die Mühe zur Umsetzung für EDOMI!

              Leider habe ich folgende Probleme.

              LBS hängt sich nach einiger Zeit auf > im Live Modus blinkt er rot. (also Beschäftigt)
              Wenn ich das Projekt neu aktiviere funktioniert der LSB sofort wieder.
              Manchmal läuft er zwei Tage und manchmal nur 2 Stunden ohne Fehler.

              Verwende den MOXA Mode!

              Anbei das LOG wo es vom funktionieren ins nicht funktionieren übergeht:

              Code:
              2017-02-03 11:48:00    381282    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:48:00    383721    22650    6    (ID753) Debug: callExec E1
              2017-02-03 11:48:00    696269    31379    6    (ID753) Debug: Baustein startet - Trigger: E1
              2017-02-03 11:48:00    701419    31379    5    (ID753) Informational: socket_create() OK.
              2017-02-03 11:48:00    701957    31379    6    (ID753) Debug: Versuche, Moxa '192.168.179.36' auf Port '7105' zu verbinden ...
              2017-02-03 11:48:00    706737    31379    5    (ID753) Informational: socket_connect() OK.
              2017-02-03 11:48:00    707700    31379    6    (ID753) Debug: cmdSenden - Request: 00DD00
              2017-02-03 11:48:00    708228    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00DD00AD
              2017-02-03 11:48:00    708753    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 394
              2017-02-03 11:48:00    709218    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 18A[LF]
              2017-02-03 11:48:00    709753    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 8A
              2017-02-03 11:48:00    710259    31379    6    (ID753) Debug: Checksumme aus der Subroutine: 8A
              2017-02-03 11:48:00    760898    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:00    761754    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:00    762305    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:00    762708    31379    6    (ID753) Debug: reciv gekuerzt: F307F000DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:48:00    763073    31379    6    (ID753) Debug: reciv gekuerzt: 07F000DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:48:00    763484    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 00DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:48:00    764837    31379    6    (ID753) Debug: Checksumme gelesen: 20
              2017-02-03 11:48:00    765774    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:48:00    766254    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00DE14000099004E7F0003260000000009AF0224000212AD
              2017-02-03 11:48:00    766697    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 1056
              2017-02-03 11:48:00    767407    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 420[LF]
              2017-02-03 11:48:00    767781    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 20
              2017-02-03 11:48:00    768212    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:00    768582    31379    6    (ID753) Debug: String vor 07 Bereinigung: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:48:00    769023    31379    6    (ID753) Debug: String nach 07 Bereinigung: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:48:00    771665    31379    5    (ID753) Informational: Betriebsstunden Filter: 548h
              2017-02-03 11:48:00    774545    31379    5    (ID753) Informational: Betriebsstunden Stufe 1 (Abwesend): 153h
              2017-02-03 11:48:00    785571    31379    5    (ID753) Informational: Betriebsstunden Stufe 2: 153h
              2017-02-03 11:48:00    790771    31379    5    (ID753) Informational: Betriebsstunden Stufe 3: 806h
              2017-02-03 11:48:00    796778    31379    5    (ID753) Informational: Betriebsstunden Stufe 4: 530h
              2017-02-03 11:48:00    801151    31379    5    (ID753) Informational: Betriebsstunden Bypass offen: 2479h
              2017-02-03 11:48:00    806996    31379    6    (ID753) Debug: cmdSenden - Request: 00D100
              2017-02-03 11:48:00    809407    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00D100AD
              2017-02-03 11:48:00    810225    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 382
              2017-02-03 11:48:00    810723    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 17E[LF]
              2017-02-03 11:48:00    811136    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 7E
              2017-02-03 11:48:00    811506    31379    6    (ID753) Debug: Checksumme aus der Subroutine: 7E
              2017-02-03 11:48:00    993937    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:00    994899    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:00    995713    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:00    996213    31379    6    (ID753) Debug: reciv gekuerzt: F307F000D209583A45463D0F28282869
              2017-02-03 11:48:00    996608    31379    6    (ID753) Debug: reciv gekuerzt: 07F000D209583A45463D0F28282869
              2017-02-03 11:48:00    996968    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 00D209583A45463D0F28282869
              2017-02-03 11:48:00    997371    31379    6    (ID753) Debug: Checksumme gelesen: 69
              2017-02-03 11:48:00    997729    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 00D209583A45463D0F282828
              2017-02-03 11:48:00    998075    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00D209583A45463D0F282828AD
              2017-02-03 11:48:00    998506    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 873
              2017-02-03 11:48:00    998857    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 369[LF]
              2017-02-03 11:48:00    999231    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 69
              2017-02-03 11:48:00    999597    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:00    999936    31379    6    (ID753) Debug: String vor 07 Bereinigung: 00D209583A45463D0F282828
              2017-02-03 11:48:01    003185    31379    6    (ID753) Debug: String nach 07 Bereinigung: 00D209583A45463D0F282828
              2017-02-03 11:48:01    006071    31379    5    (ID753) Informational: Komforttemp: 24 �C
              2017-02-03 11:48:01    008913    31379    5    (ID753) Informational: Aussenluft: 9 �C
              2017-02-03 11:48:01    016580    31379    5    (ID753) Informational: Zuluft: 14.5 �C
              2017-02-03 11:48:01    020740    31379    5    (ID753) Informational: Abluft: 15 �C
              2017-02-03 11:48:01    030555    31379    5    (ID753) Informational: Fortluft: 10.5 �C
              2017-02-03 11:48:01    031533    31379    6    (ID753) Debug: cmdSenden - Request: 00CD00
              2017-02-03 11:48:01    032195    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00CD00AD
              2017-02-03 11:48:01    034251    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 378
              2017-02-03 11:48:01    035511    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 17A[LF]
              2017-02-03 11:48:01    036005    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 7A
              2017-02-03 11:48:01    036421    31379    6    (ID753) Debug: Checksumme aus der Subroutine: 7A
              2017-02-03 11:48:01    251775    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:01    252366    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:01    252794    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:01    253201    31379    6    (ID753) Debug: reciv gekuerzt: F307F000CE0E0F23320F2332232302014646000026
              2017-02-03 11:48:01    254183    31379    6    (ID753) Debug: reciv gekuerzt: 07F000CE0E0F23320F2332232302014646000026
              2017-02-03 11:48:01    254739    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 00CE0E0F23320F2332232302014646000026
              2017-02-03 11:48:01    256755    31379    6    (ID753) Debug: Checksumme gelesen: 26
              2017-02-03 11:48:01    257312    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:48:01    258426    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00CE0E0F23320F23322323020146460000AD
              2017-02-03 11:48:01    260032    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 806
              2017-02-03 11:48:01    261054    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 326[LF]
              2017-02-03 11:48:01    263238    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 26
              2017-02-03 11:48:01    267919    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:01    268472    31379    6    (ID753) Debug: String vor 07 Bereinigung: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:48:01    268852    31379    6    (ID753) Debug: String nach 07 Bereinigung: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:48:01    271507    31379    5    (ID753) Informational: AKT_STUFE: 2
              2017-02-03 11:48:01    272058    31379    6    (ID753) Debug: cmdSenden - Request: 000B00
              2017-02-03 11:48:01    272505    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000B00AD
              2017-02-03 11:48:01    278013    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 184
              2017-02-03 11:48:01    279480    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: B8[LF]
              2017-02-03 11:48:01    280864    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: B8
              2017-02-03 11:48:01    282183    31379    6    (ID753) Debug: Checksumme aus der Subroutine: B8
              2017-02-03 11:48:01    486629    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:01    488670    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:01    489877    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:01    490482    31379    6    (ID753) Debug: reciv gekuerzt: F307F0000C062323062C061A57
              2017-02-03 11:48:01    490880    31379    6    (ID753) Debug: reciv gekuerzt: 07F0000C062323062C061A57
              2017-02-03 11:48:01    491286    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 000C062323062C061A57
              2017-02-03 11:48:01    492399    31379    6    (ID753) Debug: Checksumme gelesen: 57
              2017-02-03 11:48:01    493633    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 000C062323062C061A
              2017-02-03 11:48:01    494479    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000C062323062C061AAD
              2017-02-03 11:48:01    494961    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 343
              2017-02-03 11:48:01    495379    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 157[LF]
              2017-02-03 11:48:01    495743    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 57
              2017-02-03 11:48:01    496181    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:01    496562    31379    6    (ID753) Debug: String vor 07 Bereinigung: 000C062323062C061A
              2017-02-03 11:48:01    497194    31379    6    (ID753) Debug: String nach 07 Bereinigung: 000C062323062C061A
              2017-02-03 11:48:01    499646    31379    5    (ID753) Informational: Status Ventilator Zuluft: 35 %
              2017-02-03 11:48:01    507173    31379    5    (ID753) Informational: Status Ventilator Abluft: 35 %
              2017-02-03 11:48:01    516052    31379    5    (ID753) Informational: Drehzahl Ventilator Zuluft: 1186 U/min
              2017-02-03 11:48:01    522733    31379    5    (ID753) Informational: Drehzahl Ventilator Abluft: 1200 U/min
              2017-02-03 11:48:01    525079    31379    6    (ID753) Debug: cmdSenden - Request: 000D00
              2017-02-03 11:48:01    525650    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000D00AD
              2017-02-03 11:48:01    526040    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 186
              2017-02-03 11:48:01    526458    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: BA[LF]
              2017-02-03 11:48:01    526815    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: BA
              2017-02-03 11:48:01    528918    31379    6    (ID753) Debug: Checksumme aus der Subroutine: BA
              2017-02-03 11:48:01    737168    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:01    738142    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:01    739408    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:01    741059    31379    6    (ID753) Debug: reciv gekuerzt: F307F0000E0400000000BF
              2017-02-03 11:48:01    741635    31379    6    (ID753) Debug: reciv gekuerzt: 07F0000E0400000000BF
              2017-02-03 11:48:01    745384    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 000E0400000000BF
              2017-02-03 11:48:01    747957    31379    6    (ID753) Debug: Checksumme gelesen: BF
              2017-02-03 11:48:01    749208    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 000E0400000000
              2017-02-03 11:48:01    750155    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000E0400000000AD
              2017-02-03 11:48:01    751867    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 191
              2017-02-03 11:48:01    753237    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: BF[LF]
              2017-02-03 11:48:01    755913    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: BF
              2017-02-03 11:48:01    756515    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:01    756895    31379    6    (ID753) Debug: String vor 07 Bereinigung: 000E0400000000
              2017-02-03 11:48:01    757301    31379    6    (ID753) Debug: String nach 07 Bereinigung: 000E0400000000
              2017-02-03 11:48:01    759793    31379    5    (ID753) Informational: Bypass: 0
              2017-02-03 11:48:01    760413    31379    6    (ID753) Debug: cmdSenden - Request: 00D900
              2017-02-03 11:48:01    760812    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00D900AD
              2017-02-03 11:48:01    766177    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 390
              2017-02-03 11:48:01    767641    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 186[LF]
              2017-02-03 11:48:01    769512    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 86
              2017-02-03 11:48:01    770381    31379    6    (ID753) Debug: Checksumme aus der Subroutine: 86
              2017-02-03 11:48:02    003319    31379    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:48:02    003916    31379    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:48:02    004383    31379    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:48:02    004772    31379    6    (ID753) Debug: reciv gekuerzt: F307F000DA11000000000000000000000000000000000098
              2017-02-03 11:48:02    005556    31379    6    (ID753) Debug: reciv gekuerzt: 07F000DA11000000000000000000000000000000000098
              2017-02-03 11:48:02    006017    31379    6    (ID753) Debug: String ohne 07F0 am Anfang: 00DA11000000000000000000000000000000000098
              2017-02-03 11:48:02    007483    31379    6    (ID753) Debug: Checksumme gelesen: 98
              2017-02-03 11:48:02    008009    31379    6    (ID753) Debug: Datenpaket ohne Checksumme: 00DA110000000000000000000000000000000000
              2017-02-03 11:48:02    008436    31379    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00DA110000000000000000000000000000000000AD
              2017-02-03 11:48:02    008857    31379    6    (ID753) Debug: Checksumme vor der Umwandlung: 408
              2017-02-03 11:48:02    009241    31379    6    (ID753) Debug: Checksumme vor der Kuerzung: 198[LF]
              2017-02-03 11:48:02    009603    31379    6    (ID753) Debug: Checksumme nach der Kuerzung: 98
              2017-02-03 11:48:02    009958    31379    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:48:02    010339    31379    6    (ID753) Debug: String vor 07 Bereinigung: 00DA110000000000000000000000000000000000
              2017-02-03 11:48:02    010699    31379    6    (ID753) Debug: String nach 07 Bereinigung: 00DA110000000000000000000000000000000000
              2017-02-03 11:48:02    017219    31379    5    (ID753) Informational: FehlerCode:
              2017-02-03 11:48:02    020262    31379    5    (ID753) Informational: Filter voll: 0
              2017-02-03 11:48:02    024559    31379    5    (ID753) Informational: Status Text: Aktuell kein Fehler - Filter nicht voll
              2017-02-03 11:48:02    026448    31379    5    (ID753) Informational: ENDE zyklische Abfrage
              2017-02-03 11:49:00    160017    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:49:00    162260    22650    6    (ID753) Debug: callExec E1
              2017-02-03 11:49:00    611376    31425    6    (ID753) Debug: Baustein startet - Trigger: E1
              2017-02-03 11:49:00    613965    31425    5    (ID753) Informational: socket_create() OK.
              2017-02-03 11:49:00    624718    31425    6    (ID753) Debug: Versuche, Moxa '192.168.179.36' auf Port '7105' zu verbinden ...
              2017-02-03 11:49:00    627177    31425    5    (ID753) Informational: socket_connect() OK.
              2017-02-03 11:49:00    627806    31425    6    (ID753) Debug: cmdSenden - Request: 00DD00
              2017-02-03 11:49:00    628235    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00DD00AD
              2017-02-03 11:49:00    633296    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 394
              2017-02-03 11:49:00    634617    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 18A[LF]
              2017-02-03 11:49:00    635869    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 8A
              2017-02-03 11:49:00    639316    31425    6    (ID753) Debug: Checksumme aus der Subroutine: 8A
              2017-02-03 11:49:00    688394    31425    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:49:00    688988    31425    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:49:00    689475    31425    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:49:00    689851    31425    6    (ID753) Debug: reciv gekuerzt: F307F000DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:49:00    690232    31425    6    (ID753) Debug: reciv gekuerzt: 07F000DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:49:00    690603    31425    6    (ID753) Debug: String ohne 07F0 am Anfang: 00DE14000099004E7F0003260000000009AF022400021220
              2017-02-03 11:49:00    690958    31425    6    (ID753) Debug: Checksumme gelesen: 20
              2017-02-03 11:49:00    691355    31425    6    (ID753) Debug: Datenpaket ohne Checksumme: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:49:00    691714    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00DE14000099004E7F0003260000000009AF0224000212AD
              2017-02-03 11:49:00    692154    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 1056
              2017-02-03 11:49:00    692523    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 420[LF]
              2017-02-03 11:49:00    692859    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 20
              2017-02-03 11:49:00    693281    31425    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:49:00    693936    31425    6    (ID753) Debug: String vor 07 Bereinigung: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:49:00    694430    31425    6    (ID753) Debug: String nach 07 Bereinigung: 00DE14000099004E7F0003260000000009AF0224000212
              2017-02-03 11:49:00    701817    31425    5    (ID753) Informational: Betriebsstunden Filter: 548h
              2017-02-03 11:49:00    705862    31425    5    (ID753) Informational: Betriebsstunden Stufe 1 (Abwesend): 153h
              2017-02-03 11:49:00    714567    31425    5    (ID753) Informational: Betriebsstunden Stufe 2: 153h
              2017-02-03 11:49:00    719049    31425    5    (ID753) Informational: Betriebsstunden Stufe 3: 806h
              2017-02-03 11:49:00    727765    31425    5    (ID753) Informational: Betriebsstunden Stufe 4: 530h
              2017-02-03 11:49:00    733656    31425    5    (ID753) Informational: Betriebsstunden Bypass offen: 2479h
              2017-02-03 11:49:00    735467    31425    6    (ID753) Debug: cmdSenden - Request: 00D100
              2017-02-03 11:49:00    736017    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00D100AD
              2017-02-03 11:49:00    736716    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 382
              2017-02-03 11:49:00    737174    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 17E[LF]
              2017-02-03 11:49:00    737535    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 7E
              2017-02-03 11:49:00    737867    31425    6    (ID753) Debug: Checksumme aus der Subroutine: 7E
              2017-02-03 11:49:00    935503    31425    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:49:00    936431    31425    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:49:00    936948    31425    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:49:00    937361    31425    6    (ID753) Debug: reciv gekuerzt: F307F000D209583A45463D0F28282869
              2017-02-03 11:49:00    937715    31425    6    (ID753) Debug: reciv gekuerzt: 07F000D209583A45463D0F28282869
              2017-02-03 11:49:00    938050    31425    6    (ID753) Debug: String ohne 07F0 am Anfang: 00D209583A45463D0F28282869
              2017-02-03 11:49:00    938440    31425    6    (ID753) Debug: Checksumme gelesen: 69
              2017-02-03 11:49:00    939007    31425    6    (ID753) Debug: Datenpaket ohne Checksumme: 00D209583A45463D0F282828
              2017-02-03 11:49:00    939486    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00D209583A45463D0F282828AD
              2017-02-03 11:49:00    939881    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 873
              2017-02-03 11:49:00    940259    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 369[LF]
              2017-02-03 11:49:00    940606    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 69
              2017-02-03 11:49:00    940932    31425    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:49:00    941288    31425    6    (ID753) Debug: String vor 07 Bereinigung: 00D209583A45463D0F282828
              2017-02-03 11:49:00    941632    31425    6    (ID753) Debug: String nach 07 Bereinigung: 00D209583A45463D0F282828
              2017-02-03 11:49:00    949035    31425    5    (ID753) Informational: Komforttemp: 24 �C
              2017-02-03 11:49:00    952645    31425    5    (ID753) Informational: Aussenluft: 9 �C
              2017-02-03 11:49:00    957844    31425    5    (ID753) Informational: Zuluft: 14.5 �C
              2017-02-03 11:49:00    962677    31425    5    (ID753) Informational: Abluft: 15 �C
              2017-02-03 11:49:00    971687    31425    5    (ID753) Informational: Fortluft: 10.5 �C
              2017-02-03 11:49:00    973532    31425    6    (ID753) Debug: cmdSenden - Request: 00CD00
              2017-02-03 11:49:00    974123    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00CD00AD
              2017-02-03 11:49:00    974525    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 378
              2017-02-03 11:49:00    974869    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 17A[LF]
              2017-02-03 11:49:00    975228    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 7A
              2017-02-03 11:49:00    975675    31425    6    (ID753) Debug: Checksumme aus der Subroutine: 7A
              2017-02-03 11:49:01    191289    31425    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:49:01    191884    31425    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:49:01    192342    31425    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:49:01    192722    31425    6    (ID753) Debug: reciv gekuerzt: F307F000CE0E0F23320F2332232302014646000026
              2017-02-03 11:49:01    193064    31425    6    (ID753) Debug: reciv gekuerzt: 07F000CE0E0F23320F2332232302014646000026
              2017-02-03 11:49:01    193484    31425    6    (ID753) Debug: String ohne 07F0 am Anfang: 00CE0E0F23320F2332232302014646000026
              2017-02-03 11:49:01    193846    31425    6    (ID753) Debug: Checksumme gelesen: 26
              2017-02-03 11:49:01    194214    31425    6    (ID753) Debug: Datenpaket ohne Checksumme: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:49:01    195144    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 00CE0E0F23320F23322323020146460000AD
              2017-02-03 11:49:01    196219    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 806
              2017-02-03 11:49:01    196759    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 326[LF]
              2017-02-03 11:49:01    197146    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 26
              2017-02-03 11:49:01    197515    31425    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:49:01    198257    31425    6    (ID753) Debug: String vor 07 Bereinigung: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:49:01    198766    31425    6    (ID753) Debug: String nach 07 Bereinigung: 00CE0E0F23320F23322323020146460000
              2017-02-03 11:49:01    206840    31425    5    (ID753) Informational: AKT_STUFE: 2
              2017-02-03 11:49:01    209661    31425    6    (ID753) Debug: cmdSenden - Request: 000B00
              2017-02-03 11:49:01    211962    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000B00AD
              2017-02-03 11:49:01    213574    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 184
              2017-02-03 11:49:01    215795    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: B8[LF]
              2017-02-03 11:49:01    217771    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: B8
              2017-02-03 11:49:01    219065    31425    6    (ID753) Debug: Checksumme aus der Subroutine: B8
              2017-02-03 11:49:01    435384    31425    6    (ID753) Debug: Exit 07070F
              2017-02-03 11:49:01    435972    31425    6    (ID753) Debug: ACK gesendet
              2017-02-03 11:49:01    436425    31425    6    (ID753) Debug: Erste 4 Byte des Datenpakets: 07F3
              2017-02-03 11:49:01    436790    31425    6    (ID753) Debug: reciv gekuerzt: F307F0000C062323062E061C5B
              2017-02-03 11:49:01    437405    31425    6    (ID753) Debug: reciv gekuerzt: 07F0000C062323062E061C5B
              2017-02-03 11:49:01    437854    31425    6    (ID753) Debug: String ohne 07F0 am Anfang: 000C062323062E061C5B
              2017-02-03 11:49:01    438247    31425    6    (ID753) Debug: Checksumme gelesen: 5B
              2017-02-03 11:49:01    438662    31425    6    (ID753) Debug: Datenpaket ohne Checksumme: 000C062323062E061C
              2017-02-03 11:49:01    439007    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000C062323062E061CAD
              2017-02-03 11:49:01    439430    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 347
              2017-02-03 11:49:01    442845    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: 15B[LF]
              2017-02-03 11:49:01    443456    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: 5B
              2017-02-03 11:49:01    444732    31425    6    (ID753) Debug: Checksumme OK
              2017-02-03 11:49:01    445499    31425    6    (ID753) Debug: String vor 07 Bereinigung: 000C062323062E061C
              2017-02-03 11:49:01    445903    31425    6    (ID753) Debug: String nach 07 Bereinigung: 000C062323062E061C
              2017-02-03 11:49:01    449660    31425    5    (ID753) Informational: Status Ventilator Zuluft: 35 %
              2017-02-03 11:49:01    465840    31425    5    (ID753) Informational: Status Ventilator Abluft: 35 %
              2017-02-03 11:49:01    469995    31425    5    (ID753) Informational: Drehzahl Ventilator Zuluft: 1185 U/min
              2017-02-03 11:49:01    475563    31425    5    (ID753) Informational: Drehzahl Ventilator Abluft: 1198 U/min
              2017-02-03 11:49:01    477166    31425    6    (ID753) Debug: cmdSenden - Request: 000D00
              2017-02-03 11:49:01    478663    31425    6    (ID753) Debug: String fuer die Berechnung der Checksumme: 000D00AD
              2017-02-03 11:49:01    479259    31425    6    (ID753) Debug: Checksumme vor der Umwandlung: 186
              2017-02-03 11:49:01    480072    31425    6    (ID753) Debug: Checksumme vor der Kuerzung: BA[LF]
              2017-02-03 11:49:01    481050    31425    6    (ID753) Debug: Checksumme nach der Kuerzung: BA
              2017-02-03 11:49:01    483726    31425    6    (ID753) Debug: Checksumme aus der Subroutine: BA
              2017-02-03 11:50:00    282438    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:51:00    210385    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:52:00    259460    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:53:00    317620    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:54:00    114330    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:55:00    258902    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:56:00    250904    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:57:00    317996    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:58:00    091829    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 11:59:00    163017    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:00:00    524569    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:01:00    266228    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:02:00    093498    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:03:00    127680    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:04:00    193305    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:05:00    333524    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:06:00    297986    22650    5    (ID753) Informational: Trigger Zyklus
              2017-02-03 12:07:00    103013    22650    5    (ID753) Informational: Trigger Zyklus
              Im Log sieht man einen Zyklus der ohne Fehler durchläuft. Im nächsten Zyklus scheint der LSB bei der Checksumme aus der Subroutine hängen zu bleiben.
              Darauf ist bei jedem Zyklus der LSB blockiert bis zu nächste Projektaktivierung.

              Vieleicht kann mir jemand behilflich sein.

              Schöne Grüße
              Gernot

              Kommentar


                #37
                Es scheint zumindest ein "MOXA"-spezifisches Problem zu sein. Ich habe den LBS über den seriellen Anschluss schon mehrere Wochen problemlos im Einsatz.
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  #38
                  Hallo zusammen
                  Hat es jemand schon versucht die 550 mittels Eibport zu steuern?

                  Kommentar


                    #39
                    Hm, hier im Edomi-Forum? Lass mich mal kurz überlegen.....

                    Kommentar


                      #40
                      ups, sry...

                      Kommentar


                        #41
                        So habe den MOXA bug vermutlich gefunden. Hab schon fast aufgegeben.

                        Fehlersuche und versuche:
                        >Das ganze auf UDP umzustellen hatte auch nichts gebracht, selber Effekt.
                        > Bei der funktion finish() habe ich versucht "socket_shutdown($socket,2)" vor dem schließen des socket einzufügen.
                        > Lt. Debug Protokoll musste der Fehler in der Warteschleife für die Rückmeldung liegen.

                        Doch nach gefühlten 100malen drüberlesen, kam ich zum Schluss, die while Schleife kann nicht das Problem sein. (wird ja zeitlich abgebrochen)

                        In der PHP Manual bin ich auf folgenden Beitrag gestoßen:
                        http://php.net/manual/de/function.so...ead.php#115903
                        also versuchte ich auf Empfehlung den socket_recv Befehl

                        Den LBS in Zeile 477 wie folgt abgeändert.
                        PHP-Code:
                            if($connection->sType == "M"){
                        // $sin = socket_read($connection->target, 45); //Zeile auskommentiert
                                
                        socket_recv($connection->target$sin45MSG_DONTWAIT);  
                                } 
                        Was soll ich sagen es läuft nun.

                        An dieser stelle möchte ich mich beim Autor des LBS bedanken.
                        Der Code ist sehr schön übersichtlich und lesbar gehalten.
                        Man findet sich recht schnell zu recht und der LBS macht was er soll.

                        Hab mir den Baustein mit Notepad++ von ANSI auf UTF8 ohne BOM konvertiert.
                        Jetzt passen die Umlaute und Sonderzeichen wieder.

                        Ist mir jetzt schon bei mehreren Bausteinen aufgefallen. Passiert das beim upload?

                        Die Betriebsstunden der einzelnen Stufen kommen mir nicht plausibel vor.
                        Bei mir läuft am meisten die Stufe 2, hat aber die wenigsten Betriebsstunden.

                        Danke nochmal für den tollen LBS und

                        Schöne Grüße
                        Gernot

                        Kommentar


                          #42
                          Danke für die Rückmeldung! Ich werde deine Änderung in den Download-Bereich übernehmen. Vg Tobias

                          Kommentar


                            #43
                            So, ich habe mich mal an dem Baustein versucht.

                            Da ich keine Steuerung besitze und meine comfoair350 mal justieren wollte habe ich mir ein kleines Setup programmiert.
                            Ein Vorheizregister ist auch vorhanden. Bei bedarf kann man die Codeschnipsel ja in die Download-Version übernehmen.
                            Bei den Info Ausgängen habe ich Informationen gruppiert um sie einfacher in die Visu einbinden zu können. (Infoboxen)

                            Folgende Ein- und Ausgänge sind hinzugekommen:

                            PHP-Code:
                            [e#13 TRIGGER     = ABL_0 ]
                            [e#14 TRIGGER     = ABL_1 ]
                            [e#15 TRIGGER     = ABL_2 ]
                            [e#16 TRIGGER     = ZUL_0 ]
                            [e#17 TRIGGER     = ZUL_1 ]
                            [e#18 TRIGGER     = ZUL_2 ]
                            [e#19 TRIGGER     = ABL_3 ]
                            [e#20 TRIGGER     = ZUL_3 ]

                            [a#21        = Frostschutz ]
                            [a#22        = Vorheizung ]
                            [a#23        = Info_Vorheizregister ]
                            [a#24        = Info_Lüfterstufen_set  ]
                            [a#25        = Info_Betriebsstunden ] 


                            Der erweiterte LBS Teil:
                            PHP-Code:
                                        } elseif ($E[6]['refresh']==&& $E[6]['value'] != 0) {
                                            
                            logic_setVar($id,101,6);
                                            
                            LB_LBSID_debug($id,"Trigger Fehler Reset",5);
                                        }
                            //____________Einstellung_der_einzelnen_Stufen_über_E13_bis_E20________Gernot_09.02.2017___
                            elseif ($E[13]['refresh']==&& $E[13]['value'] != 0) {
                                            
                            logic_setVar($id,101,13);
                                            
                            LB_LBSID_debug($id,"Set_ABL_ST_0",5);
                                        }
                            elseif (
                            $E[14]['refresh']==&& $E[14]['value'] != 0) {
                                            
                            logic_setVar($id,101,14);
                                            
                            LB_LBSID_debug($id,"Set_ZUL_ST_0",5);
                                        }
                            elseif (
                            $E[15]['refresh']==&& $E[15]['value'] != 0) {
                                            
                            logic_setVar($id,101,15);
                                            
                            LB_LBSID_debug($id,"Set_ABL_ST_1",5);
                                        }
                            elseif (
                            $E[16]['refresh']==&& $E[16]['value'] != 0) {
                                            
                            logic_setVar($id,101,16);
                                            
                            LB_LBSID_debug($id,"Set_ZUL_ST_1",5);
                                        }
                            elseif (
                            $E[17]['refresh']==&& $E[17]['value'] != 0) {
                                            
                            logic_setVar($id,101,17);
                                            
                            LB_LBSID_debug($id,"Set_ABL_ST_2",5);
                                        }
                            elseif (
                            $E[18]['refresh']==&& $E[18]['value'] != 0) {
                                            
                            logic_setVar($id,101,18);
                                            
                            LB_LBSID_debug($id,"Set_ZUL_ST_2",5);
                                        }
                            elseif (
                            $E[19]['refresh']==&& $E[19]['value'] != 0) {
                                            
                            logic_setVar($id,101,19);
                                            
                            LB_LBSID_debug($id,"Set_ABL_ST_3",5);
                                        }
                            elseif (
                            $E[20]['refresh']==&& $E[20]['value'] != 0) {
                                            
                            logic_setVar($id,101,20);
                                            
                            LB_LBSID_debug($id,"Set_ZUL_ST_3",5);
                                        }
                            //_____________________________________________________________________________________

                                        
                            $e logic_getVar($id,101);
                                        if(
                            in_array($e, array(1,3,4,5,6,13,14,15,16,17,18,19,20)) && getLogicElementStatus($id)==0){    //Erweitert um die Setup Eingänge Gernot
                                            
                            setLogicElementStatus($id,1);
                                            
                            LB_LBSID_debug($id,"callExec E".$e,6);
                                            
                            callLogicFunctionExec(LBSID,$id);                
                                        } 

                            Die Lüfterstufen Einstellung habe ich folgender maßen realisiert:
                            Bei einer Werteingabe an den Eingängen 13-20 wird der LBS getriggert.
                            In der Hauptschleife wird zuerst die aktuelle Einstellung gelesen, der angegebene Wert ersetzt und das gesamte Setup zurückgeschrieben.
                            Zuletzt wird das aktuelle Setup nochmal gelesen und über die Infobox ausgegeben.
                            PHP-Code:
                            //____________Einstellung_der_einzelnen_Stufen_über_E13_bis_E20________Gernot_09.02.2017__
                            elseif(in_array($t, array(13,14,15,16,17,18,19,20)))
                            {
                                
                            $statusSTUFEN command_senden($id,$connection"00CD00");
                                if (
                            validateReturnString($id,$statusSTUFEN))
                                {
                                    
                            $Befehl "00CF09";
                                    
                            $statusSTUFEN ''.substr($statusSTUFEN612).substr($statusSTUFEN264).'';
                                    switch(
                            $t)
                                    {
                                        case 
                            13:    //ABL_0
                                            
                            if((intval($E[13]['value']) >= 15) && (intval($E[13]['value']) <= 97))
                                            {                          
                            //$E[13] > in hex > 2Stellig mit führender 0 links > Großbuchstaben
                                                
                            $value strtoupper(str_pad(dechex($E[13]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.$value.substr($statusSTUFEN214).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            14:    //ABL_1
                                            
                            if((intval($E[14]['value']) >= 16) && (intval($E[14]['value']) <= 98)){
                                                
                            $value strtoupper(str_pad(dechex($E[14]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN02).$value.substr($statusSTUFEN412).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            15:    //ABL_2
                                            
                            if((intval($E[15]['value']) >= 17) && (intval($E[15]['value']) <= 99)){
                                                
                            $value strtoupper(str_pad(dechex($E[15]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN04).$value.substr($statusSTUFEN610).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            16:    //ZUL_0
                                            
                            if((intval($E[16]['value']) >= 15) && (intval($E[16]['value']) <= 97)){
                                                
                            $value strtoupper(str_pad(dechex($E[16]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN06).$value.substr($statusSTUFEN88).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            17:    //ZUL_1
                                            
                            if((intval($E[17]['value']) >= 16) && (intval($E[17]['value']) <= 98)){
                                                
                            $value strtoupper(str_pad(dechex($E[17]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN08).$value.substr($statusSTUFEN106).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            18:    //ZUL_2
                                            
                            if((intval($E[18]['value']) >= 17) && (intval($E[18]['value']) <= 99)){
                                                
                            $value strtoupper(str_pad(dechex($E[18]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN010).$value.substr($statusSTUFEN124).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            19:    //ABL_3
                                            
                            if((intval($E[19]['value']) >= 18) && (intval($E[19]['value']) <= 100)){
                                                
                            $value strtoupper(str_pad(dechex($E[19]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN012).$value.substr($statusSTUFEN142).'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        case 
                            20:    //ZUL_3
                                            
                            if((intval($E[20]['value']) >= 18) && (intval($E[20]['value']) <= 100)){
                                                
                            $value strtoupper(str_pad(dechex($E[20]['value']), ,'0'STR_PAD_LEFT));
                                                
                            $daten=''.substr($statusSTUFEN014).$value.'00';
                                                
                            command_senden($id,$connection$Befehl.$daten);
                                            }
                                            break;

                                        default:
                                            break;
                                    }
                                
                            command_read($id,$connection"00CD00");
                                }


                            Hier noch die Erweiterung fürs Vorheizregister und Infoboxen
                            function command_readAll:
                            PHP-Code:
                            //____________Erweiterung_für_Infoboxen________Gernot_09.02.2017___
                                #Status Vorheizung
                                
                            $daten[] = "00E100"
                            function getValuesOfString:
                            PHP-Code:
                            //__________Vorheizregister Status_____________Gernot_16.02.2017____
                                
                            elseif (strstr($reciv"00E206") !== false) {
                                    
                            $klappe substr($reciv62);
                                    
                            $frostschutz substr($reciv82);
                                    
                            $vorhzg substr($reciv102);
                                    
                            $frost_minuten substr($reciv124);
                                    
                            $frostsicherheit substr($reciv162);
                                
                            /*
                                [a#21        = Frostschutz ]
                                [a#22        = Vorheizung ]
                                */

                                
                            logic_setOutput($id,21,hexdec($frostschutz));
                                
                            debug($id,"Status Frostschutz: " hexdec($frostschutz) . " ",5);

                                
                            logic_setOutput($id,22,hexdec($vorhzg));
                                
                            debug($id,"Status Vorheizung: " hexdec($vorhzg) . " ",5);

                            $InfoBox 'Klappe                : '.hexdec($klappe).'
                            Frostschutz            : '
                            .hexdec($frostschutz).'
                            Vorheizung            : '
                            .hexdec($vorhzg).'
                            Frostminuten        : '
                            .hexdec($frost_minuten).'
                            Frostsicherheit        : '
                            .hexdec($frostsicherheit).'';

                                
                            logic_setOutput($id,23,$InfoBox);

                                }
                            elseif (
                            strstr($reciv"00CE0E") !== false) {#Wenn der Status der Ventilatorenstufe empfangen wurden
                                    
                            $akt_stufe substr($reciv222);
                                
                            /*
                                [a#12        = AKT_STUFE ]
                                */

                                
                            logic_setOutput($id,12,hexdec($akt_stufe));
                                
                            debug($id,"AKT_STUFE: "hexdec($akt_stufe),5);
                            //__________Statusbox_Lüfterstufen_____________Gernot_16.02.2017______
                            $InfoBox 'Abluft Stufe 0 abwesend       : '.hexdec(substr($reciv62)).'%
                            Zuluft Stufe 0 abwesend       : '
                            .hexdec(substr($reciv122)).'%
                            Abluft Stufe 1                : '
                            .hexdec(substr($reciv82)).'%
                            Zuluft Stufe 1                : '
                            .hexdec(substr($reciv142)).'%
                            Abluft Stufe 2                : '
                            .hexdec(substr($reciv102)).'%
                            Zuluft Stufe 2                : '
                            .hexdec(substr($reciv162)).'%
                            Abluft Stufe 3                : '
                            .hexdec(substr($reciv262)).'%
                            Zuluft Stufe 3                : '
                            .hexdec(substr($reciv282)).'%
                            Info:
                            Abluft aktuell                : '
                            .hexdec(substr($reciv182)).'%
                            Zuluft aktuell                : '
                            .hexdec(substr($reciv202)).'%
                            Aktuelle Stufe                : '
                            .hexdec(substr($reciv222)).'
                            Zuluft Ventilator 1=aktiv     : '
                            .hexdec(substr($reciv242)).'';

                                
                            logic_setOutput($id,24,$InfoBox);

                                } 
                            PHP-Code:
                            //_____Statusbox_Betriebsstunden____________________Gernot_16.02.2017______________
                            $BetribsstundenInfoBox 'Filter        : '.hexdec(substr($reciv364)).'h
                            Stufe Abwesend: '
                            .hexdec(substr($reciv66)).'h
                            Stufe 1       : '
                            .hexdec(substr($reciv126)).'h
                            Stufe 2       : '
                            .hexdec(substr($reciv186)).'h
                            Stufe 3       : '
                            .hexdec(substr($reciv406)).'h
                            Frost         : '
                            .hexdec(substr($reciv244)).'h
                            Vorheizung    : '
                            .hexdec(substr($reciv284)).'h
                            Bypass        : '
                            .hexdec(substr($reciv324)).'h
                            '
                            ;
                                
                            logic_setOutput($id,25,$BetribsstundenInfoBox); 

                            Zur Info: Hab einen Bug bei dem Betriebsstunden Zähler Stufe 1 gefunden.
                            Der String war gleich geteilt wie Stufe 2. Habe Statt ($reciv, 6, 6) dann ($reciv, 12, 6) eingetragen.
                            PHP-Code:
                                logic_setOutput($id,2,hexdec(substr($reciv66)));
                                
                            debug($id,"Betriebsstunden Stufe 0 (Abwesend): "hexdec(substr($reciv66)) . "h",5);

                                
                            logic_setOutput($id,3,hexdec(substr($reciv126)));
                                
                            debug($id,"Betriebsstunden Stufe 1: "hexdec(substr($reciv126)) . "h",5);

                                
                            logic_setOutput($id,4,hexdec(substr($reciv186)));
                                
                            debug($id,"Betriebsstunden Stufe 2: "hexdec(substr($reciv186)) . "h",5); 



                            Die Debugoption würde ich bei bedarf nachpflegen.
                            Natürlich bin ich auch gerne behilflich wenn jemand so ein Setup braucht.
                            Hoffe es hilft jemandem weiter. Für mich ist erstmal genug Wohnraumlüftung.


                            Schöne Grüße
                            Gernot

                            Kommentar


                              #44
                              Hier noch der gesamte mod LBS

                              PHP-Code:
                              ###[DEF]###
                              [name        = Zehnder Comfoair CA350,550, Stork und baugleiche ]

                              [e#1 TRIGGER     = Trigger ]
                              [e#2 IMPORTANT     = SerialDevice/MoxaIP ]
                              [e#3 TRIGGER     = Stufe ]
                              [e#4 TRIGGER     = Komforttemp ]
                              [e#5 TRIGGER     = Filter Reset ]
                              [e#6 TRIGGER     = Fehler Reset ]
                              [e#9 OPTION     = LogLevel #init=3 ]
                              [e#10 OPTION     = Schnittstellentyp #init=S ]
                              [e#11 OPTION     = MoxaPort ]
                              [e#13 TRIGGER     = set_ABL_0 ]
                              [e#14 TRIGGER     = set_ABL_1 ]
                              [e#15 TRIGGER     = set_ABL_2 ]
                              [e#16 TRIGGER     = set_ZUL_0 ]
                              [e#17 TRIGGER     = set_ZUL_1 ]
                              [e#18 TRIGGER     = set_ZUL_2 ]
                              [e#19 TRIGGER     = set_ABL_3 ]
                              [e#20 TRIGGER     = set_ZUL_3 ]

                              [a#1        = Betrieb_h_Filter ]
                              [a#2        = Betrieb_h_Stufe_1 ]
                              [a#3        = Betrieb_h_Stufe_2 ]
                              [a#4        = Betrieb_h_Stufe_3 ]
                              [a#5        = Betrieb_h_Stufe_4 ]
                              [a#6        = Betrieb_h_Bypass_offen ]
                              [a#7        = Komforttemp ]
                              [a#8        = Aussenluft ]
                              [a#9        = Zuluft ]
                              [a#10        = Abluft ]
                              [a#11        = Fortluft ]
                              [a#12        = AKT_STUFE ]
                              [a#13        = Stat_Vent_Zuluft ]
                              [a#14        = Stat_Vent_Abluft ]
                              [a#15        = RPM_Vent_Zuluft ]
                              [a#16        = RPM_Vent_Abluft ]
                              [a#17        = Bypass ]
                              [a#18        = Akt_FehlerCode ]
                              [a#19        = Filter_voll_1_0 ]
                              [a#20        = Status_Text ]
                              [a#21        = Frostschutz ]
                              [a#22        = Vorheizung ]
                              [a#23        = Info_Vorheizregister ]
                              [a#24        = Info_Lüfterstufen_set  ]
                              [a#25        = Info_Betriebsstunden ]

                              [v#101        = 0 ]

                              ###[/DEF]###


                              ###[HELP]###
                              Der Baustein basiert auf:
                              + http://www.see-solutions.de/sonstiges/Protokollbeschreibung_ComfoAir.pdf
                              + https://knx-user-forum.de/forum/%C3%B6ffentlicher-bereich/knx-eib-forum/code-schnipsel/21895-comfoair-steuerung-%C3%BCber-rs232?p=881622#post881622

                              <u><b>ACHTUNG!</b></u>
                              Der Baustein sollte nicht parallel zu einer CC-Ease/-Luxe Bedieneinheit genutzt werden.
                              Wenn Pakete von zwei Stellen an die Anlage gesendet werden kann es Kollisionen und Fehlfunktionen/Sch&auml;den kommen.
                              Grunds&auml;tzlich gilt: Nutzung auf eigenes Risiko!!!

                              <u><b>ACHTUNG!</b></u>
                              Die Moxa-Schnittstelle ist bisher ungetestet.
                              Grunds&auml;tzlich gilt: Nutzung auf eigenes Risiko!!!

                              <u><b>Vorbereitung</b></u>
                              Die mitgelieferte Datei phpserial.php muss nach /usr/local/edomi/main/include/php kopiert werden.
                              In E10 den Typ der Schnittstelle angeben S=seriell, M=Moxa
                              In E2 das Device (z.B. /dev/ttyUSB0) der Seriellen-Schnittstelle oder die IP-Adresse vom Moxa angeben.
                              In E11 ggf. den MoxaPort angeben
                              In E9 ggf. den Debug-Level &auml;ndern.

                              <u><b>Folgende Werte werden ausgelesen wenn E1 != ""</b></u>
                              Betrieb_h_Filter: 3739h
                              Betrieb_h_Stufe_1 (Abwesend): 846h
                              Betrieb_h_Stufe_2: 20225h
                              Betrieb_h_Stufe_3: 10557h
                              Betrieb_h_Stufe_4: 2007h
                              Betrieb_h_Bypass_offen: 7249h
                              Komforttemp: 22 °C
                              Aussenluft:  8.5 °C
                              Zuluft:      18 °C
                              Abluft:      19.5 °C
                              Fortluft:    10.5 °C
                              AKT_STUFE: 2
                              Status_Vent_Zuluft: 35 %
                              Status_Vent_Abluft: 38 %
                              RPM_Vent_Zuluft: 1154 U/min
                              RPM_Vent_Abluft: 1236 U/min
                              Bypass: 0 %
                              Akt_Fehlercode: keiner
                              Aktuell kein Fehler - Filter nicht voll

                              <u><b>Lüftungs-Stufe setzen</b></u>
                              E3 Wert 1-4

                              <u><b>Komforttemperatur setzen</b></u>
                              E4 Wert 15-25 in 0,5er Schritten

                              <u><b>Reset Filter</b></u>
                              E5 Wert ungleich 0

                              <u><b>Reset Fehler</b></u>
                              E6 Wert ungleich 0

                              <u><b>LogLevel</b></u>
                              0: Emergency
                              1: Alert
                              2: Critical
                              3: Error
                              4: Warning
                              5: Informational
                              6: Debug

                              <hr/>
                              <b><u>Changelog:</u></b>
                              0.1:
                              -initiale Version
                              0.2:
                              -Trigger f&uuml;r Stufe, Komforttemp. und Filter-/Fehler-Reset
                              0.3:
                              -Bugfix Kommunikations-Timeout beim Setzen von Werten
                              0.4:
                              -Option für Moxa-Schnittstelle
                              -Komforttemperatur kann jetzt in 0.5 Schritten gesetzt werden

                              ###[/HELP]###


                              ###[LBS]###
                              <?
                              function LB_LBSID($id) {
                                  if ($E=getLogicEingangDataAll($id)) {

                                          if($E[1]['refresh'] && $E[1]['value'] != "") {
                                              logic_setVar($id,101,1);
                                              LB_LBSID_debug($id,"Trigger Zyklus",5);
                                          } elseif($E[3]['refresh'] == 1) {
                                              if (empty($E[3]['value'])) {
                                              LB_LBSID_debug($id,"Stufenwert leer",3);
                                              } else {
                                              logic_setVar($id,101,3);
                                              LB_LBSID_debug($id,"Trigger Stufe",5);
                                              }

                                          } elseif ($E[4]['refresh'] == 1) {
                                              if (empty($E[4]['value'])) {
                                              LB_LBSID_debug($id,"Temperaturwert leer",3);
                                              } else {
                                                  logic_setVar($id,101,4);
                                              LB_LBSID_debug($id,"Trigger Temp",5);
                                              }

                                          } elseif ($E[5]['refresh']==1 && $E[5]['value'] != 0) {
                                              logic_setVar($id,101,5);
                                              LB_LBSID_debug($id,"Trigger Filter",5);
                                          } elseif ($E[6]['refresh']==1 && $E[6]['value'] != 0) {
                                              logic_setVar($id,101,6);
                                              LB_LBSID_debug($id,"Trigger Fehler Reset",5);
                                          }
                              //____________Einstellung_der_einzelnen_Stufen_über_E13_bis_E20________Gernot_09.02.2017______________________________________________________________
                              elseif ($E[13]['refresh']==1 && $E[13]['value'] != 0) {
                                              logic_setVar($id,101,13);
                                              LB_LBSID_debug($id,"Set_ABL_ST_0",5);
                                          }
                              elseif ($E[14]['refresh']==1 && $E[14]['value'] != 0) {
                                              logic_setVar($id,101,14);
                                              LB_LBSID_debug($id,"Set_ZUL_ST_0",5);
                                          }
                              elseif ($E[15]['refresh']==1 && $E[15]['value'] != 0) {
                                              logic_setVar($id,101,15);
                                              LB_LBSID_debug($id,"Set_ABL_ST_1",5);
                                          }
                              elseif ($E[16]['refresh']==1 && $E[16]['value'] != 0) {
                                              logic_setVar($id,101,16);
                                              LB_LBSID_debug($id,"Set_ZUL_ST_1",5);
                                          }
                              elseif ($E[17]['refresh']==1 && $E[17]['value'] != 0) {
                                              logic_setVar($id,101,17);
                                              LB_LBSID_debug($id,"Set_ABL_ST_2",5);
                                          }
                              elseif ($E[18]['refresh']==1 && $E[18]['value'] != 0) {
                                              logic_setVar($id,101,18);
                                              LB_LBSID_debug($id,"Set_ZUL_ST_2",5);
                                          }
                              elseif ($E[19]['refresh']==1 && $E[19]['value'] != 0) {
                                              logic_setVar($id,101,19);
                                              LB_LBSID_debug($id,"Set_ABL_ST_3",5);
                                          }
                              elseif ($E[20]['refresh']==1 && $E[20]['value'] != 0) {
                                              logic_setVar($id,101,20);
                                              LB_LBSID_debug($id,"Set_ZUL_ST_3",5);
                                          }
                              //____________________________________________________________________________________________________________________________________________________

                                          $e = logic_getVar($id,101);
                                          if(in_array($e, array(1,3,4,5,6,13,14,15,16,17,18,19,20)) && getLogicElementStatus($id)==0){    //Erweitert um die Setup Eingänge Gernot
                                              setLogicElementStatus($id,1);
                                              LB_LBSID_debug($id,"callExec E".$e,6);
                                              callLogicFunctionExec(LBSID,$id);                
                                          }
                                  }
                              }

                              function LB_LBSID_debug($id,$s,$l=6) {
                                  $a=array("Emergency","Alert","Critical","Error","Warning","Informational","Debug");
                                  $E=logic_getInputs($id);
                                  $DEBUG=$E[9]['value'];
                                  $l<=$DEBUG && writeToCustomLog("LBSLBSID",$l,"(ID$id) ".$a[$l].": ".$s);
                              }

                              ?>
                              ###[/LBS]###


                              ###[EXEC]###
                              <?
                              require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                              set_time_limit(60);
                              restore_error_handler();
                              error_reporting(0);
                              ini_set("display_errors", 0);
                              sql_connect();

                              #Quelle:
                              #Idee und Konzeption:
                              # Plugin zur Ansteuerung einer Zender ComfoAir
                              # Version 1.6.9 15.07.2014 BETA
                              # Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
                              # Aufbau moeglichst so, dass man unterhalb der Einstellungen nichts veraendern muss!
                              # - Neu mit der Moeglichkeit zur Anbindung über einen Moxa NPort von Fechter65 (http://knx-user-forum.de/members/fechter65.html)
                              # - Neustrukturierung des Codes von Fechter65 (http://knx-user-forum.de/members/fechter65.html)
                              # - Besseres Fehlerhandling bei der Verarbeitung der Reuckmeldungen von swiss (http://knx-user-forum.de/members/swiss.html)
                              # - Neu nun mit direktem abfragen der Stufe nach dem setzen und auswerten der Komforttemperatur von swiss (http://knx-user-forum.de/members/swiss.html)
                              # - Neu mit der Möglichkeit die Ventilationsstufe direkt zu setzen von swiss (http://knx-user-forum.de/members/swiss.html)
                              # - Neu mit der Möglichkeit die Ventilatorstufe für Zuluft und Abluft getrennt zu setzen (0% - 100%) von Netsrac80 (http://knx-user-forum.de/members/netsrac80.html)
                              # - Korrektur Stufe direkt setzen. Senden / empfangen hat nun das gleiche Mapping 1=Auto, 2=Sufe1, 3=Stufe2, 4=Stufe3
                              # - Neu mit Rückmeldung auf Lesetelegramme
                              # - Bugfix: Themperatur wird nach dem Verstellen nicht direkt als Status zurückgegeben

                              #Modifikation für Edomi by MSW
                              # - Aufbau als Edomi LBS asto (http://knx-user-forum.de/members/asto.html)

                              if ($E=getLogicEingangDataAll($id)) {
                                  $t = logic_getVar($id,101);
                                  debug($id,"Baustein startet - Trigger: E".$t,6);

                                  $connection = new stdClass;

                                  # den Schnittstellentyp festlegen
                                  if(!empty($E[10]['value'])){
                                         $connection->sType=$E[10]['value'];
                                      } else {
                                          debug($id,"Keinen Schnittstellen-Typ angegeben, Abbruch",0);
                                          finish();
                                      }

                                      #Pfad zur seriellen Schnittstelle oder dem Moxa:
                                  #$schnittstelle = '/dev/ttyUSB0';
                                  if(!empty($E[2]['value'])){
                                         $schnittstelle=$E[2]['value'];
                                      } else {
                                          debug($id,"Keine Schnittstelle angegeben, Abbruch",0);
                                          finish();
                                      }

                                  switch($connection->sType){
                                  case "S":
                                      #Einrichten der Seriellen Schnittstelle fuer die Kommunikation mit der ComfoAir
                                      include(dirname(__FILE__)."/../../../../main/include/php/phpserial.php");
                                      // Let's start the class
                                      debug($id,"PhpSerial: ".$schnittstelle." erstellen",6);
                                      $serial = new PhpSerial();

                                      // First we must specify the device. This works on both linux and windows (if
                                      // your linux serial device is /dev/ttyS0 for COM1, etc)
                                      $serial->deviceSet($schnittstelle);

                                      // We can change the baud rate, parity, length, stop bits, flow control
                                      $serial->confBaudRate(9600);
                                      $serial->confParity("none");
                                      $serial->confCharacterLength(8);
                                      $serial->confStopBits(1);
                                      $serial->confFlowControl("custom");

                                      if(! $serial->deviceOpen()){
                                        debug($id,"Schnittstelle: ".$schnittstelle." nicht geoeffnet",0);
                                        finish();
                                      }

                                      usleep(500);//delay

                                      $connection->target = $serial;

                                      debug($id,"Schnittstelle: ".$schnittstelle." erfolgreich geoeffnet",5);
                                      break;
                                  case "M":
                                      #Port am Moxa:
                                      if(!empty($E[11]['value'])){
                                         $port=$E[11]['value'];
                                      } else {
                                          debug($id,"Keinen MoxaPort angegeben, Abbruch",0);
                                          finish();
                                      }        

                                      /* Einen TCP/IP-Socket erzeugen. */
                                      $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                                      if ($socket === false) {
                                          debug($id,"socket_create() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error()) . ", Abbruch",0);
                                          finish();
                                      } else {
                                          debug($id,"socket_create() OK.",5);
                                      }

                                      debug($id,"Versuche, Moxa '".$schnittstelle."' auf Port '".$port."' zu verbinden ...",6);
                                      $result = socket_connect($socket, $schnittstelle, $port);
                                      if ($result === false) {
                                          debug($id,"socket_connect() fehlgeschlagen. Grund: ($result) " . socket_strerror(socket_last_error($socket)) . ", Abbruch",0);
                                          finish();
                                      } else {
                                          debug($id,"socket_connect() OK.",5);
                                      }

                                      $connection->target = $socket;        

                                      break;
                                  default:
                                      debug($id,"Kein passender Schnittstellen-Typ: '".$connection->sType."' angegeben!",0);
                                  }

                                  if ($t == 3) {
                                      if (empty($E[3]['value'])) {
                                      debug($id,"Stufenwert leer",3);
                                      } elseif ( (intval($E[3]['value']) >= 1) && (intval($E[3]['value']) <= 4) ) {
                                      $daten = "0099010".intval($E[3]['value']);
                                      debug($id,"Stufe setzen auf: ".intval($E[3]['value']),5);
                                      command_senden($id,$connection, $daten);
                                      }
                                      command_read($id,$connection, "00CD00");

                                  } elseif ($t == 4) {
                                      if (empty($E[4]['value'])) {
                                      debug($id,"Temperaturwert leer",3);
                                      } elseif ((intval($E[4]['value']) >= 15) && (intval($E[4]['value']) <= 25)) {
                                      $value = (float)str_replace(',', '.', $E[4]['value']);
                                      $value = round($value * 2) / 2;
                                      debug($id,"Komforttemperatur setzen auf: ".$value,5);

                                      #Rechne die Temperatur fuer die Co$
                                      $temphex = ($value + 20) * 2;
                                      # Mache einen HEX-Wert
                                      $temphex = sprintf("%x", $temphex);

                                      $daten = "00D301".$temphex;
                                      command_senden($id,$connection, $daten);
                                      }
                                      command_read($id,$connection, "00D100");

                                  } elseif ($t==5 && $E[5]['value'] != 0) {
                                      command_senden($id,$connection, "00DB0400000001");
                                      debug($id,"Filter wurde zurueckgesetzt",5);
                                      command_read($id,$connection, "00D900");

                                  } elseif ($t==6 && $E[6]['value'] != 0) {
                                      command_senden($id,$connection, "00DB0401000000");
                                      debug($id,"Fehlermeldung wurde zurueckgesetzt",5);
                                      command_read($id,$connection, "00D900");
                                  }
                              //____________Einstellung_der_einzelnen_Stufen_über_E13_bis_E20________Gernot_09.02.2017______________________________________________________________
                              elseif(in_array($t, array(13,14,15,16,17,18,19,20)))
                              {
                                  $statusSTUFEN = command_senden($id,$connection, "00CD00");
                                  if (validateReturnString($id,$statusSTUFEN))
                                  {
                                      $Befehl = "00CF09";
                                      $statusSTUFEN = ''.substr($statusSTUFEN, 6, 12).substr($statusSTUFEN, 26, 4).'';
                                      switch($t)
                                      {
                                          case 13:    //ABL_0
                                              if((intval($E[13]['value']) >= 15) && (intval($E[13]['value']) <= 97))
                                              {
                                                  $value = strtoupper(str_pad(dechex($E[13]['value']), 2 ,'0', STR_PAD_LEFT)); //$E[13] > in hex > 2Stellig mit führender 0 links > Großbuchstaben
                                                  $daten=''.$value.substr($statusSTUFEN, 2, 14).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 14:    //ABL_1
                                              if((intval($E[14]['value']) >= 16) && (intval($E[14]['value']) <= 98)){
                                                  $value = strtoupper(str_pad(dechex($E[14]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 2).$value.substr($statusSTUFEN, 4, 12).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 15:    //ABL_2
                                              if((intval($E[15]['value']) >= 17) && (intval($E[15]['value']) <= 99)){
                                                  $value = strtoupper(str_pad(dechex($E[15]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 4).$value.substr($statusSTUFEN, 6, 10).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 16:    //ZUL_0
                                              if((intval($E[16]['value']) >= 15) && (intval($E[16]['value']) <= 97)){
                                                  $value = strtoupper(str_pad(dechex($E[16]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 6).$value.substr($statusSTUFEN, 8, 8).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 17:    //ZUL_1
                                              if((intval($E[17]['value']) >= 16) && (intval($E[17]['value']) <= 98)){
                                                  $value = strtoupper(str_pad(dechex($E[17]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 8).$value.substr($statusSTUFEN, 10, 6).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 18:    //ZUL_2
                                              if((intval($E[18]['value']) >= 17) && (intval($E[18]['value']) <= 99)){
                                                  $value = strtoupper(str_pad(dechex($E[18]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 10).$value.substr($statusSTUFEN, 12, 4).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 19:    //ABL_3
                                              if((intval($E[19]['value']) >= 18) && (intval($E[19]['value']) <= 100)){
                                                  $value = strtoupper(str_pad(dechex($E[19]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 12).$value.substr($statusSTUFEN, 14, 2).'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          case 20:    //ZUL_3
                                              if((intval($E[20]['value']) >= 18) && (intval($E[20]['value']) <= 100)){
                                                  $value = strtoupper(str_pad(dechex($E[20]['value']), 2 ,'0', STR_PAD_LEFT));
                                                  $daten=''.substr($statusSTUFEN, 0, 14).$value.'00';
                                                  command_senden($id,$connection, $Befehl.$daten);
                                              }
                                              break;

                                          default:
                                              break;
                                      }
                                  command_read($id,$connection, "00CD00");
                                  }
                              }
                              //____________________________________________________________________________________________________________________________________________________
                                  else {
                                      command_readAll($id,$connection);
                                  }

                                  finish();
                              }

                              function command_read($id,$connection,$request){
                                  $return = command_senden($id,$connection, $request);
                                  if (validateReturnString($id,$return)) {
                                      getValuesOfString($id,$return);
                                  }
                              }

                              function command_readAll($id,$connection) {

                                  $daten = array();

                                  #Daten der Anlage abfragen
                                  $daten[] = "00DD00";

                                  #Temperaturen
                                  $daten[] = "00D100";

                                  #Ventilatorstufe
                                  $daten[] = "00CD00";

                                  #Status Ventilator
                                  $daten[] = "000B00";

                                  #Status Bypass
                                  $daten[] = "000D00";

                                  #Fehlercodes
                                  $daten[] = "00D900";

                              //____________Erweiterung_für_Infoboxen________Gernot_09.02.2017______________________________________________________________________________________
                                  #Status Vorheizung
                                  $daten[] = "00E100";

                                  #Status Bootloader
                              //    $daten[] = "006700";

                                  #Status Firmware
                              //    $daten[] = "006900";

                                  #Status Analogwerte
                              //    $daten[] = "009D00";
                              //____________________________________________________________________________________________________________________________________________________
                                  foreach($daten as $request){
                                    command_read($id, $connection, $request);
                                  }

                                  debug($id,"ENDE zyklische Abfrage",5);
                              }

                              function validateReturnString($id, &$reciv) {

                                  $laenge;
                                  #Laenge des empfangenen Datenstrings nach dem kuerzen
                                  $checksum = 0;
                                  #Checksumme
                                  $rcv_checksum = "";

                                  #solange das Ende nicht 070F lautet
                                  while ((strlen($reciv) > 3) && (substr($reciv, (strlen($reciv) - 4), 4) != '070F')){
                                      debug($id,"String vor Kuerzung Ende: ". $reciv,6);
                                      $reciv = substr($reciv, 0, -2);
                                      #String um die letzten zwei Zeichen kuerzen
                                      debug($id,"String nach Kuerzung Ende: ". $reciv,6);
                                  }

                                  #Hier wird der empfangene String um Start- und Endbyte gekuerzt
                                  $laenge = strlen($reciv);
                                  #Laenge des Antworttelegramms ermitteln
                                  $reciv = substr($reciv, 0, ($laenge - 4));
                                  #Entferne 07F0 vom Ende

                                  if (substr($reciv, (strlen($reciv) - 4), 4) == '07F3') {
                                      $reciv = substr($reciv, 0, ($laenge - 4));
                                      debug($id,"String ohne 07F3: ". $reciv,6);
                                  }

                                  debug($id,"Erste 4 Byte des Datenpakets: ". (substr($reciv, 0, 4)),6);

                                  while ((strlen($reciv) > 3) && (substr($reciv, 0, 4)) != '07F0') {
                                      $reciv = substr($reciv, 2);
                                      #falls noch falsche Zeichen am Anfang des Strings enthalten sind, werden diese hier entfernt.
                                      debug($id,"reciv gekuerzt: ". $reciv,6);
                                  }

                                  $reciv = substr($reciv, 4);
                                  debug($id,"String ohne 07F0 am Anfang: ". $reciv,6);

                                  #Test einer Methode falls aussversehen mehrere Datenpakete auf einmal im Datenstring enthalten sind...
                                  if (stristr($reciv, "07F307F0") !== false) {
                                      $dataarray = preg_split("/07F307F0/i", $reciv);
                                      $reciv = $dataarray[0];
                                  }

                                  #Nun wird die Checksumme gelesen und aus dem Datenstring entfernt
                                  $checksum = 0;
                                  $checksum = substr($reciv, -2, 2);
                                  debug($id,"Checksumme gelesen: ". $checksum,6);

                                  $laenge = strlen($reciv);
                                  #Laenge des Antworttelegramms ermitteln
                                  $reciv = substr($reciv, 0, ($laenge - 2));
                                  debug($id,"Datenpaket ohne Checksumme: ". $reciv,6);

                                  #Hier wird die Subroutine für die Berechnung der Checksumme aufgerufen und das Ergebnis in $rcv_checksum zurueck gegeben
                                  $rcv_checksum = checksum_berechnen($id,$reciv);

                                  if ($rcv_checksum == $checksum) {
                                  debug($id,"Checksumme OK",6);    
                                  }
                                  #Hier werden die doppelten 07 aus dem Antwortstring entfernt.
                                  debug($id,"String vor 07 Bereinigung: ". $reciv,6);
                                  $reciv = preg_replace("/0707/", "07", $reciv);
                                  debug($id,"String nach 07 Bereinigung: ". $reciv,6);

                                  return $rcv_checksum == $checksum;

                              }

                              function command_senden($id, $connection, $data) {

                                  if (!is_object($connection) || empty($data) || !is_string($data)) {
                                      debug($id,"Fehler in command_senden Parametern, Abbruch",0);
                                      finish();
                                  }

                                  #Weitere Variablen die benoetigt werden

                                  #Serial Input = Empangener Datenstrom
                                  $sin = "";
                                  #Counter Input =  Länge des Datenpakets
                                  $cin = "";
                                  $reciv = "";
                                  $ack = pack("H*", "07F3");

                                  debug($id,"cmdSenden - Request: ". $data,6);

                                  $checksum = checksum_berechnen($id, $data);
                                  debug($id,"Checksumme aus der Subroutine: " . $checksum,6);

                                  $command = pack("H*", "07F0".$data.$checksum."070F");

                                  #Befehl an die ComfoAir senden
                                  if($connection->sType == "S"){
                                  $connection->target->sendMessage($command);
                                  }
                                  if($connection->sType == "M"){
                                  socket_write($connection->target, $command, strlen($command));    
                                  }


                                  /**
                                   * Hier ist eine Warteschleife für die Rueckmeldung eingebaut
                                   */
                                  $lastAccess = time();
                                  while (true) {

                                  if($connection->sType == "S"){
                                          $sin = $connection->target->readPort(45);
                                  }
                                  if($connection->sType == "M"){
                              //        $sin = socket_read($connection->target, 45);                //auskommentiert von Gernot
                                      socket_recv($connection->target, $sin, 45, MSG_DONTWAIT);    //socket_recv verwendet
                                      }                                                            //socket_read block > (bug in einer while Schleife,kann nicht abgebrochen werden)

                                      $cin = strlen($sin);
                                      if ($cin > 0) {
                                          $sin = unpack("H*", $sin);
                                          $reciv .= strtoupper(array_shift($sin));

                                          //debug($id,$reciv,6);

                                          $lastAccess = time();
                                      }

                                      if ($reciv == "07F3") {
                                          debug($id,"Exit ACK only",6);
                                          break;
                                      }

                                      if (stristr($reciv, "070F") !== false) {
                                          if (substr($reciv, (strlen($reciv) - 6), 6) != '07070F') {
                                              debug($id,"Exit 07070F",6);
                                              break;
                                          }
                                      }

                                      if (time()-$lastAccess > 5) {
                                          debug($id,"Exit command_senden() timeout!",3);
                                          break;
                                      }
                                  usleep(200);
                                 }
                                  #ACK senden
                                      if($connection->sType == "S"){

                                          $sin = $connection->target->sendMessage($ack);
                                  }
                                  if($connection->sType == "M"){
                                      socket_write($connection->target, $ack, strlen($ack));    
                                     }


                                  debug($id,"ACK gesendet",6);

                                  if (empty($reciv)) {
                                      debug($id,"FEHLER: Keine Daten empfangen!",3);

                                      return null;
                                  }

                                  return $reciv;
                              }

                              function getValuesOfString($id,$reciv) {

                                  if (strstr($reciv, "00D209") !== false) {#Wenn die Temperaturen empfangen wurden
                                      $t1 = substr($reciv, 6, 2);
                                      $t2 = substr($reciv, 8, 2);
                                      $t3 = substr($reciv, 10, 2);
                                      $t4 = substr($reciv, 12, 2);
                                      $t5 = substr($reciv, 14, 2);

                                      #Hier werden die Temperaturen "decodiert" damit sie einen Sinn ergeben
                                      $t1 = (hexdec($t1) / 2) - 20;
                                      $t2 = (hexdec($t2) / 2) - 20;
                                      $t3 = (hexdec($t3) / 2) - 20;
                                      $t4 = (hexdec($t4) / 2) - 20;
                                      $t5 = (hexdec($t5) / 2) - 20;

                                  /*
                                  [a#7        = Komforttemp ]
                                  [a#8        = Aussenluft ]
                                  [a#9        = Zuluft ]
                                  [a#10        = Abluft ]
                                  [a#11        = Fortluft ]
                                  */

                                  logic_setOutput($id,7,$t1);
                                  debug($id,"Komforttemp: " . $t1 . " °C",5);

                                  logic_setOutput($id,8,$t2);
                                  debug($id,"Aussenluft:  " . $t2 . " °C",5);

                                  logic_setOutput($id,9,$t3);
                                  debug($id,"Zuluft:      " . $t3 . " °C",5);

                                  logic_setOutput($id,10,$t4);
                                  debug($id,"Abluft:      " . $t4 . " °C",5);

                                  logic_setOutput($id,11,$t5);
                                  debug($id,"Fortluft:    " . $t5 . " °C",5);
                                  }
                              //__________Vorheizregister Status_____________Gernot_16.02.2017______________________________________________________________________________________
                                  elseif (strstr($reciv, "00E206") !== false) {
                                      $klappe = substr($reciv, 6, 2);
                                      $frostschutz = substr($reciv, 8, 2);
                                      $vorhzg = substr($reciv, 10, 2);
                                      $frost_minuten = substr($reciv, 12, 4);
                                      $frostsicherheit = substr($reciv, 16, 2);
                                  /*
                                  [a#21        = Frostschutz ]
                                  [a#22        = Vorheizung ]
                                  */

                                  logic_setOutput($id,21,hexdec($frostschutz));
                                  debug($id,"Status Frostschutz: " . hexdec($frostschutz) . " ",5);

                                  logic_setOutput($id,22,hexdec($vorhzg));
                                  debug($id,"Status Vorheizung: " . hexdec($vorhzg) . " ",5);

                              $InfoBox = 'Klappe                : '.hexdec($klappe).'
                              Frostschutz            : '.hexdec($frostschutz).'
                              Vorheizung            : '.hexdec($vorhzg).'
                              Frostminuten        : '.hexdec($frost_minuten).'
                              Frostsicherheit        : '.hexdec($frostsicherheit).'';

                                  logic_setOutput($id,23,$InfoBox);

                                  }
                              //____________________________________________________________________________________________________________________________________________________
                                  elseif (strstr($reciv, "009814") !== false) {#Wenn die Sensordaten empfangen wurden
                                      $s1 = substr($reciv, 6, 2);
                                      $s2 = substr($reciv, 8, 2);  

                                      #Hier werden die Sensordaten "decodiert"
                                      $s1 = (hexdec($s1) / 2) - 20;
                                      $s2 = hexdec($s2);

                                      #print "Enthalpie Temp: " . $s1 . " °C\n";
                                      #print "Enthalpie Feuchte:  " . $s2 . " %\n";

                                  } elseif (strstr($reciv, "000C06") !== false) {#Wenn der Status fuer die Ventilatoren empfangen wurden
                                      $vent_zul = substr($reciv, 6, 2);
                                      $vent_abl = substr($reciv, 8, 2);
                                      $speed_zul = substr($reciv, 10, 4);
                                      $speed_abl = substr($reciv, 14, 4);

                                  /*

                                  [a#13        = Stat_Vent_Zuluft ]
                                  [a#14        = Stat_Vent_Abluft ]
                                  [a#15        = RPM_Vent_Zuluft ]
                                  [a#16        = RPM_Vent_Abluft ]

                                  */


                                  logic_setOutput($id,13,hexdec($vent_zul));
                                  debug($id,"Status Ventilator Zuluft: " . hexdec($vent_zul) . " %",5);

                                  logic_setOutput($id,14,hexdec($vent_abl));
                                  debug($id,"Status Ventilator Abluft: " . hexdec($vent_abl) . " %",5);

                                  logic_setOutput($id,15,intval(1875000 / hexdec($speed_zul)));
                                  debug($id,sprintf("Drehzahl Ventilator Zuluft: %d U/min", (1875000 / hexdec($speed_zul))),5);

                                  logic_setOutput($id,16,intval(1875000 / hexdec($speed_abl)));
                                  debug($id,sprintf("Drehzahl Ventilator Abluft: %d U/min", (1875000 / hexdec($speed_abl))),5);


                                  } elseif (strstr($reciv, "00CE0E") !== false) {#Wenn der Status der Ventilatorenstufe empfangen wurden
                                      $akt_stufe = substr($reciv, 22, 2);
                                  /*
                                  [a#12        = AKT_STUFE ]
                                  */

                                  logic_setOutput($id,12,hexdec($akt_stufe));
                                  debug($id,"AKT_STUFE: ". hexdec($akt_stufe),5);
                              //__________Statusbox_Lüfterstufen_____________Gernot_16.02.2017______________________________________________________________________________________
                              $InfoBox = 'Abluft Stufe 0 abwesend       : '.hexdec(substr($reciv, 6, 2)).'%
                              Zuluft Stufe 0 abwesend        : '.hexdec(substr($reciv, 12, 2)).'%
                              Abluft Stufe 1                : '.hexdec(substr($reciv, 8, 2)).'%
                              Zuluft Stufe 1                : '.hexdec(substr($reciv, 14, 2)).'%
                              Abluft Stufe 2                : '.hexdec(substr($reciv, 10, 2)).'%
                              Zuluft Stufe 2                : '.hexdec(substr($reciv, 16, 2)).'%
                              Abluft Stufe 3                : '.hexdec(substr($reciv, 26, 2)).'%
                              Zuluft Stufe 3                : '.hexdec(substr($reciv, 28, 2)).'%
                              Info:
                              Abluft aktuell                : '.hexdec(substr($reciv, 18, 2)).'%
                              Zuluft aktuell                : '.hexdec(substr($reciv, 20, 2)).'%
                              Aktuelle Stufe                : '.hexdec(substr($reciv, 22, 2)).'
                              Zuluft Ventilator 1=aktiv    : '.hexdec(substr($reciv, 24, 2)).'';

                                  logic_setOutput($id,24,$InfoBox);

                                  }
                              //____________________________________________________________________________________________________________________________________________________
                                  elseif (strstr($reciv, "000E04") !== false) {#Wenn der Status fuer die Bypassklappe empfangen wurden
                                      $bypass_prozent = substr($reciv, 6, 2);

                                  logic_setOutput($id,17,hexdec($bypass_prozent));
                                  debug($id,"Bypass: ". hexdec($bypass_prozent),5);

                                  /*
                                  [a#17        = Bypass ]
                                  */
                                  }
                                  elseif (strstr($reciv, "00DE14") !== false) {#Wenn die Rueckmeldung der Betriebsstunden empfangen wurden
                                  /*
                                  [a#1        = Betrieb_h_Filter ]
                                  [a#2        = Betrieb_h_Stufe_1 ]
                                  [a#3        = Betrieb_h_Stufe_2 ]
                                  [a#4        = Betrieb_h_Stufe_3 ]
                                  [a#5        = Betrieb_h_Stufe_4 ]
                                  [a#6        = Betrieb_h_Bypass_offen ]
                                  */
                              //_____Statusbox_Betriebsstunden____________________Gernot_16.02.2017_________________________________________________________________________________
                              $BetribsstundenInfoBox = '
                              Filter            : '.hexdec(substr($reciv, 36, 4)).'h
                              Stufe Abwesend    : '.hexdec(substr($reciv, 6, 6)).'h
                              Stufe 1            : '.hexdec(substr($reciv, 12, 6)).'h
                              Stufe 2            : '.hexdec(substr($reciv, 18, 6)).'h
                              Stufe 3            : '.hexdec(substr($reciv, 40, 6)).'h
                              Frost            : '.hexdec(substr($reciv, 24, 4)).'h
                              Vorheizung        : '.hexdec(substr($reciv, 28, 4)).'h
                              Bypass            : '.hexdec(substr($reciv, 32, 4)).'h
                              ';
                                  logic_setOutput($id,25,$BetribsstundenInfoBox);
                              //____________________________________________________________________________________________________________________________________________________

                                  logic_setOutput($id,2,hexdec(substr($reciv, 6, 6)));
                                  debug($id,"Betriebsstunden Stufe 0 (Abwesend): ". hexdec(substr($reciv, 6, 6)) . "h",5);

                                  logic_setOutput($id,3,hexdec(substr($reciv, 12, 6)));
                                  debug($id,"Betriebsstunden Stufe 1: ". hexdec(substr($reciv, 12, 6)) . "h",5);

                                  logic_setOutput($id,4,hexdec(substr($reciv, 18, 6)));
                                  debug($id,"Betriebsstunden Stufe 2: ". hexdec(substr($reciv, 18, 6)) . "h",5);

                                  debug($id,"Betriebsstunden Frost: ". hexdec(substr($reciv, 24, 4)) . "h",5);

                                  debug($id,"Betriebsstunden Vorheizung: ". hexdec(substr($reciv, 28, 4)) . "h",5);

                                  logic_setOutput($id,6,hexdec(substr($reciv, 32, 4)));
                                  debug($id,"Betriebsstunden Bypass offen: ". hexdec(substr($reciv, 32, 4)) . "h",5);

                                  logic_setOutput($id,1,hexdec(substr($reciv, 36, 4)));
                                  debug($id,"Betriebsstunden Filter: ". hexdec(substr($reciv, 36, 4)) . "h",5);

                                  logic_setOutput($id,5,hexdec(substr($reciv, 40, 6)));
                                  debug($id,"Betriebsstunden Stufe 3: ". hexdec(substr($reciv, 40, 6)) . "h",5);
                                  }
                                  elseif (strstr($reciv, "00DA11") !== false) {#Wenn die Rueckmeldung der Stoermeldungen empfangen wurde

                                      $fehlerAlo = substr($reciv, 6, 2);
                                      $fehlerAhi = substr($reciv, 30, 2);
                                      $fehlerE = substr($reciv, 8, 2);
                                      $fehlerFilter = substr($reciv, 22, 2);
                                      $fehlerEA = substr($reciv, 24, 2);
                                      $numAlo = '';
                                      $numAhi = '';
                                      $numE = '';
                                      $numEA = '';

                                      $numAlo .= sprintf('%08b', hexdec($fehlerAlo));
                                      $numAhi .= sprintf('%08b', hexdec($fehlerAhi));
                                      $numE .= sprintf('%08b', hexdec($fehlerE));
                                      $numEA .= sprintf('%08b', hexdec($fehlerAlo));

                                      $fehlerAlo = strrev($numAlo);
                                      #Wandle den Wert in Binaer und drehe die Reihenfolge um. z.B 0x02 = 00000010 = 010000000
                                      $fehlerAlo = strpos($fehlerAlo, '1') !== false ? strpos($fehlerAlo, '1') + 1 : 0;
                                      # Zaehle an welcher Stelle die 1 auftaucht (von links gelesen) z.B. 01000000 = INDEX 2 = Fehler2

                                      if ($fehlerAhi != '00') {
                                          $fehlerAhi = strpos(strrev($numAhi), '1') + 9;
                                      } else {
                                          $fehlerAhi = '';
                                      }

                                      $fehlerE = strpos(strrev($numE), '1') !== false ? strpos(strrev($numE), '1') + 1 : 0;
                                      $fehlerEA = strpos(strrev($numEA), '1') !== false ? strpos(strrev($numEA), '1') + 1 : 0;
                                      if ($fehlerAhi == 16) {
                                          $fehlerAhi = 0;
                                      }

                                  /*
                                  [a#18        = Akt_FehlerCode ]
                                  [a#19        = Filter_voll_1_0 ]
                                  [a#20        = Status_Text ]
                                  */

                                      if ($fehlerAlo > 0) {
                                          $aktFC = 'A' . $fehlerAlo;
                                      } elseif ($fehlerAhi != '') {
                                          $aktFC = 'A' . $fehlerAhi;
                                      } elseif ($fehlerE > 0) {
                                          $aktFC = 'E' . $fehlerE;
                                      } elseif ($fehlerEA > 0) {
                                          $aktFC = 'EA' . $fehlerEA;
                                      } else {
                                          $aktFC = '';
                                      }

                                      if (hexdec($fehlerFilter) > 0) {
                                      $filterFlag = 1;
                                      } else {
                                      $filterFlag = 0;
                                      }

                                  $statText = ($aktFC == '' ? 'Aktuell kein Fehler' : 'Fehler: '.$aktFC);
                                   $statText .= ' - '.($filterFlag == 0 ? 'Filter nicht voll' : 'Filter voll');

                                  logic_setOutput($id,18,$aktFC);
                                  debug($id,"FehlerCode: ".$aktFC,5);

                                  logic_setOutput($id,19,$filterFlag);
                                  debug($id,"Filter voll: ".$filterFlag,5);

                                  logic_setOutput($id,20,$statText);
                                  debug($id,"Status Text: ".$statText,5);
                                  }
                              //____________Bootloader_Firmware_Analogwerte_______________________Gernot_16.02.2017_________________________________________________________________
                              /*
                              elseif (strstr($reciv, "00680D") !== false) {//Bootloader

                              $InfoBox = '**************************
                              *       Bootloader       *
                              **************************
                              Version        : '.hexdec(substr($reciv, 6, 2)).'.'.hexdec(substr($reciv, 8, 2)).'.'.hexdec(substr($reciv, 10, 2)).'
                              Geräte Name    : '.substr($reciv, 12, 20).'';
                                  logic_setOutput($id,27,$InfoBox);
                              }

                              elseif (strstr($reciv, "006A0D") !== false) {//Firmware

                              $InfoBox = 'Version        : '.hexdec(substr($reciv, 6, 2)).'.'.hexdec(substr($reciv, 8, 2)).'.'.hexdec(substr($reciv, 10, 2)).'';
                              //Geräte Name    : '.substr($reciv, 12, 20).'

                                  logic_setOutput($id,26,$InfoBox);
                              }

                              elseif (strstr($reciv, "009E13") !== false) {//Analogwerte abrufen

                              $InfoBox = 'Analog 1 Min. Einstellung (%)  : '.hexdec(substr($reciv, 12, 2)).'
                              Analog 1 Max. Einstellung (%)  : '.hexdec(substr($reciv, 14, 2)).'
                              Analog 1 Sollwert (%)          : '.hexdec(substr($reciv, 16, 2)).'
                              Analog 2 Min. Einstellung (%)  : '.hexdec(substr($reciv, 18, 2)).'
                              Analog 2 Max. Einstellung (%)  : '.hexdec(substr($reciv, 20, 2)).'
                              Analog 2 Sollwert (%)          : '.hexdec(substr($reciv, 22, 2)).'
                              Analog 3 Min. Einstellung (%)  : '.hexdec(substr($reciv, 24, 2)).'
                              Analog 3 Max. Einstellung (%)  : '.hexdec(substr($reciv, 26, 2)).'
                              Analog 3 Sollwert (%)          : '.hexdec(substr($reciv, 28, 2)).'
                              Analog 4 Min. Einstellung (%)  : '.hexdec(substr($reciv, 30, 2)).'
                              Analog 4 Max. Einstellung (%)  : '.hexdec(substr($reciv, 32, 2)).'
                              Analog 4 Sollwert (%)          : '.hexdec(substr($reciv, 34, 2)).'
                              Analog RF Min. Einstellung (%) : '.hexdec(substr($reciv, 36, 2)).'
                              Analog RF Max. Einstellung (%) : '.hexdec(substr($reciv, 38, 2)).'
                              Analog RF Sollwert (%)         : '.hexdec(substr($reciv, 40, 2)).'
                              Priorität Regelung 1 = WochenP : '.hexdec(substr($reciv, 42, 2)).'
                              ';
                                  logic_setOutput($id,29,$InfoBox);
                              }
                              */
                              //____________________________________________________________________________________________________________________________________________________

                              }

                              function checksum_berechnen($id,$chk_datasum) {

                                  $rcv_checksum = 0;
                                  $i;
                                  $chk_datasum = $chk_datasum . "AD";
                                  #+173 fuer die Checksummenberechnung
                                 debug($id,"String fuer die Berechnung der Checksumme: ". $chk_datasum,6);

                                  $x07warschon = 0;
                                  #Hilfsvariable für die Checksummenberechnung
                                  $laenge = strlen($chk_datasum);
                                  for ($i = 0; $i < $laenge; $i++) {
                                      $wertstring = substr($chk_datasum, $i, 2);
                                      $wertbetrag = hexdec($wertstring);
                                      if ($wertbetrag == 7) {
                                          if ($x07warschon == 1) {
                                              $x07warschon = 0;
                                              $i++;
                                              continue;
                                          } else {
                                              $x07warschon = 1;
                                          }
                                      }
                                      $rcv_checksum += $wertbetrag;

                                      $i++;
                                  }


                                  debug($id,"Checksumme vor der Umwandlung: ". $rcv_checksum,6);

                                  $rcv_checksum = sprintf("%X\n", $rcv_checksum);
                                  #Mache aus Integer wieder HEX
                                  debug($id,"Checksumme vor der Kuerzung: ". $rcv_checksum,6);

                                  $rcv_checksum = substr($rcv_checksum, -3, 2);
                                  #Verwende nur die letzten beiden Stellen
                                  debug($id,"Checksumme nach der Kuerzung: ". $rcv_checksum,6);

                                  return $rcv_checksum;
                              } #Ende checksum_berechnen

                              function finish() {
                                  global $DEBUG,$id,$connection;

                                  if($connection->sType == "S"){
                                      $connection->target->deviceClose();
                                  }
                                  if($connection->sType == "M"){
                                      socket_shutdown($socket,2);
                                      socket_close($connection->target);
                                  }

                                  $DEBUG && debug($id,"Baustein beendet");
                                  logic_setVar($id,101,0);
                                  setLogicElementStatus($id,0);  
                                  sql_disconnect();

                                  exit();
                              }

                              function debug($id,$s,$l=6) {
                                  $a=array("Emergency","Alert","Critical","Error","Warning","Informational","Debug");
                                  $E=logic_getInputs($id);
                                  $DEBUG=$E[9]['value'];
                                  $l<=$DEBUG && writeToCustomLog("LBS19000680",$l,"(ID$id) ".$a[$l].": ".$s);
                              }
                              ?>
                              ###[/EXEC]###

                              Kommentar


                                #45
                                asto Können die ganzen Änderungen als neue Version in den Downloadbereich übernommen werden?
                                Wäre schade, wenn das hier untergeht.

                                Vielen Dank auch nochmals von meiner Seite an alle am LBS Beteiligten!
                                Gruß -mfd-
                                KNX-UF-IconSet since 2011

                                Kommentar

                                Lädt...
                                X