Hausautomation: openHAB-Binding?



  • Hallo zusammen
    Da die API des airQ in einer Betaversion schon für Tests zugänglich ist, bin ich daran, ein Binding für openHAB zu schreiben.
    Wer auch openHAB verwendet und das Binding derzeit dann testen möchte, kann sich gerne mit mir in Verbindung setzen.



  • @Aurelio Bin interessiert.
    Viele Grüße



  • Wir danken Wolfgang R. für sein Engagement. Er hat uns erlaubt seine openHAB Einbindung zu Posten.
    Download ist hier möglich:
    Anleitung air-Q Integration in openHAB (pdf)
    air-Q Integration in openHAB (air-q-data.sh)



  • Vielen Dank an den Autor!

    Ich habe getestet mit Openhab 2.5.6 und erhalte folgenden Fehler:

    ~ $ sudo -u openhab /usr/bin/python3 /usr/local/bin/air-q-data.shTraceback (most recent call last):
      File "/usr/local/bin/air-q-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/air-q-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 3: invalid continuation byte
    

    Es werden keine Daten angezeigt, s. Screenshot. Der Air-Q läuft im lokalen Netzwerk und in der Cloud, in der Android App werden Daten angezeigt.

    Viele Grüße

    Bildschirmfoto vom 2020-07-20 15-17-18.png



  • Ergänzend noch die openhab.log

    2020-07-20 17:10:29.585 [WARN ] [ng.exec.internal.handler.ExecHandler] - Couldn't transform response because transformationService of type 'REGEX' is unavailable
    2020-07-20 17:10:34.442 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte
    Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte' to a state type which item 'AirQ_Timestamp' accepts: [DateTimeType, UnDefType].
    2020-07-20 17:10:34.467 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte
    Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte' to a state type which item 'AirQ_aktZeit' accepts: [DecimalType, QuantityType, UnDefType].
    2020-07-20 17:10:34.487 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Air-Q meldet neue Werte': For input string: "Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte
    Traceback (most recent call last):
      File "/usr/local/bin/airq-data.sh", line 45, in <module>
        msg['content'] = json.loads(decodeMessage(msg['content']))
      File "/usr/local/bin/airq-data.sh", line 33, in decodeMessage
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte"
    


  • @jheiler Ich habe Wolfgang einmal kontaktiert. Er ist nicht hier im Forum bisher.
    Wir haben selbst leider im Moment kein openHAB System zum Testen.
    @Daniel-air-Q hat die Smart Home Integrationen aber auf dem Schirm. Wir kümmern uns noch intensiv darum. Im Moment ist die Auslastung wg Bugfixing an anderen Stellen noch recht groß.



  • @Aurelio Wie weit bist Du gekommen?



  • Hallo jheiler,

    ist in Deinem air-q-data.sh der Header korrekt definiert für die UTF-8-Codierung ?

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    

    Grüße
    Wolfgang



  • @Wolfgang

    Hallo,

    ich habe alles so implementiert, wie es im 3.Post angegeben ist. EXEC und JSONPATH laufen. Der Hinweis auf REGEX ist nicht plausibel, da die Transformation doch mit JSONPATH erfolgen soll.

    Viele Grüße



  • Ich habe alles noch einmal installiert, in der Beispieldokumentation für Things ist ein Tipfehler, ich hatte noch einen weiteren produziert (vermutlich Editor-Problem). Ergebnis: der REGEX-Fehler ist immer noch da, aber ich habe Daten.

    Vielen Dank noch einmal an den Autor.



  • Super !
    Ein echtes Binding wäre zwar noch cooler, aber ist wahrscheinlich gar nicht weit. Das team von air-q sollte sich bald möglichst damit auseinander setzen. Gerade weil air-q offline funktioniert spricht es die gleiche Zielgruppe an, die auch ihr smarthome offline haben, und da ist openhab und io broker Integration ein riesen plus.

    Daber ei noch die Frage. Sind die Grenzwerte nur in der app? Würde mir gut passen wenn diese als eigene info in der api wären. Ähnlich wie die led Quick Status info.



  • @Openphil
    Wir sind im Moment noch nicht so fit mit openHAB. Da brauchen wir noch Einarbeitungszeit. Es gibt auch ein paar dringende Funktionen und auch Bugfixes, die wir noch angehen müssen bevor wir uns intensiver mit openHAB beschäftigen können. Wir sind für Eure Unterstützung schonmal sehr dankbar.



  • @Mario-air-Q
    Das Binding ist soweit in einer Alpha-Version fertig. Ich kann die Werte schon in Openhab einlesen und eine Datenreihe bilden.

    Für die Vollendung habe ich aber noch die folgenden Fragen offen, v.a. zur API:

    • Die API wird sicher irgendwann angepasst. Gibt es ein Feld mit der API-Version, die ich abfragen kann?
    • "bat" wird für die bisherigen air-q nicht genutzt, aber es wäre schon schön, wenn ich die vollständige API implementieren könnte. Was geben die zwei bat-Werte aus?
    • In meinen Messungen habe ich cnt2_5 bis cnt10 immer Null. Kann das sein, zumal pm2_5 und pm10 positive Werte ausgeben? Da müsste es doch eine Beziehung geben? In welcher Einheit sind die cnt-Werte (Partikelzahl pro was? m3?)
    • Welchen Wert wird "door_event" ausgeben, wenn die Tür offen ist?
    • Ich werde das in der ersten Version noch nicht unterstützen, aber das Ziel ist, dass das openhab-Binding das Gerät im lokalen Netzwerk selber findet über das discovery service. Wie kann ich das Gerät am besten 'finden'?


  • Das Binding steht im Github zum Einbinden in eine Eclipse-Installation im Quellcode zur Verfügung: https://github.com/aurelio1/openhab-addons/tree/2.5.x/bundles/org.openhab.binding.airq

    Es gibt noch keine automatische Erkennung (discovery). Deshalb muss man im Openhab ein 'thing' kreieren durch Anwahl des Bindings. Der Rest ist selbsterklärend.

    Wer zum testen 'nur' das .jar benötigt, kann sich bei mir melden: aureliocaliaro@yahoo.de. Ich schicke es dann per E-Mail.

    99357da5-10ad-4cac-8c7c-348349abd279-image.png


Log in to reply