Modul: Technische Alternative (TA) UVR16x2, Temperatur Werte auslesen

Begonnen von ronny332, 25 September 2015, 12:28:07

Vorheriges Thema - Nächstes Thema

Haus-Andi

Hallo zusammen

Seit heute bin ich Besitzer einer Holzpelletts Anlage mit einer UVE16x2 (Version 1.31) und einem CMI (Firmware 130_2).

Wie kann ich das CMI in mit meinem fhem auslesen und im Log und auf dem Floorplan anzeigen?
Die Beschreibung mit dem CoE und dem git http..... schlägt bei mir beim Befehl "npm install" fehl. (Ich kenne den Linux Befehl "npm" auch gar nicht)

Gerne würde ich erfahren wie andere hier das machen?

Gruss Andi
Raspberry Pi+Enocen Pi
Thermokon SR04
Micropelt
USB to 1-Wire

StaBre

Hallo Zusammen,
habe seit gesten auch meine Heizung mit Solarthermie an einem UVR16x2 (1.32) und einem CMI (1.31.3)

Habe versucht die Verbindung zu Fhem herzustellen hat aber nicht geklappt. Wie habt ihr das hinbekommen?

Haus-Andi

Hallo StaBre

Ich habe nach dem x... Versuch aufgegeben, weil ich vermutlich alle verfügbare und findbare Infos aus dem Web ausprobiert habe, dazwischen musste ich den Raspi und das fhem ein paar mal neu installieren, weil irgend ein Link einen absoluter Müll war.

Seit ich weiss vorher das CMI genau kommt, resp. wer es entwickelt hatte, versuche ich einen grossen Bogen darum zu machen. Ich habe es unterdessen sogar in eine eigene DMZ gestellt. Gem. Aussagen von meine Heizungsmonteur (hat sehr guten Kontakt zu den TA Entwickler) kommt das Teil aus russischen Geheimdienstkreisen und kann noch viel mehr als nur das was wir brauchen. Ich denke es ist zumindest Vorsicht angebracht, den meine Firewall hat bis jetzt noch nicht zugemacht wegen einem Alarm, aber zumindest ist das eingerichtet. Das heisst aber nicht, dass es nicht versucht wird.

Ich habe mir jetzt auf dem grossen Flohmarkt eine einfache CAN-Schnittstelle (aus China) für den Raspi bestellt, mal schauen ob es damit dann geht. Es ist klar da muss ich dann mit meinem Heizungsmonteur dann noch die Daten definieren, aber dafür bleiben die dann wo sie sind. Bei meinem CMI hat er ein Update der Firmware gemacht, danach waren alle meine definierten Versuchspunkte wieder weg.
Sobald das Teil da ist, werde ich mit dem Steckbrett mal versuchen das ganze zum laufen zu bringen. Meine Idee ist eigentlich die, dass ich auf dem Raspi mittels der Rs232 einen 1-W DS2480 und mit der MSIO dann den CAN Bus ansprechen und im fhem einbinden kann. Ob es geht werden wir dann sehen. Das CAN-Gateway hat auf alle Fälle einen MCP2515 drauf, und ich bin der Meinung davon hier im Forum schon mal gelesen zu haben.

Sobald ich mehr weiss und habe versuche ich mich dann zu melden, ich gehe davon aus, dass ich am Schluss an meinen mangelnden fhem-Kentnisse scheitern werde.

Gruss Andi

Raspberry Pi+Enocen Pi
Thermokon SR04
Micropelt
USB to 1-Wire

delMar

Hallo Zusammen!

die CMI hat ab einer bestimmten Firmware Version auch ein Http-Interface, welches viele Daten über JSON liefert:
https://www.ta.co.at/download/datei/17511763-cmi-json-api/

Für Logging optimal, für eine Echtzeit Anzeige aber nicht so sehr, da man maximal ca 1x pro Minute Abfragen kann, bevor gedrosselt wird.

Ich hab aber noch nicht geschafft, das in ein fertiges FHEM Modul zu gießen, da meine Perl Kenntnisse arg begrenzt sind und das JSON doch sehr komplex ist.

schöne Grüße
Martin




Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

rudolfkoenig

Zitatdas JSON doch sehr komplex ist.
Es gibt seit kurzem eine Funktion json2reading($hash, $json) in fhem.pl, evtl. hilft dir das.
Wenn nicht, dann zeig mal die Daten, evtl. kann ich diese Funktion anpassen.

delMar

Zitat von: rudolfkoenig am 12 Oktober 2018, 10:18:26
Es gibt seit kurzem eine Funktion json2reading($hash, $json) in fhem.pl, evtl. hilft dir das.
Wenn nicht, dann zeig mal die Daten, evtl. kann ich diese Funktion anpassen.
Danke für das Angebot. Macht json2reading das selbe wie das Attribut extractAllJSON in HTTPMOD?

Rein technisch funktioniert extractAllJSON einwandfrei, die Readings haben dann aber nicht die Namen, die die Werte im UI der Steuerung haben, sondern zB Data_Outputs_05_Value_Unit.

Um anderen den Einstieg zu erleichtern, und verirrte Suchende, die hier stranden nicht auf dem trockenen sitzen zu lassen, dokumentiere ich einen API-call und die Antwort:

http://192.168.4.250/INCLUDE/api.cgi?jsonnode=1&jsonparam=I,O,D
Antwort

{
  "Header": {
    "Version": 3,
    "Device": "87",
    "Timestamp": 1539361037
  },
  "Data": {
    "Inputs": [
      {
        "Number": 1,
        "AD": "A",
        "Value": {
          "Value": 57.3,
          "Unit": "1"
        }
      },
      {
        "Number": 2,
        "AD": "A",
        "Value": {
          "Value": 35.8,
          "Unit": "1"
        }
      },
      {
        "Number": 3,
        "AD": "A",
        "Value": {
          "Value": 9999.9,
          "Unit": "1"
        }
      },
      {
        "Number": 4,
        "AD": "A",
        "Value": {
          "Value": 67.9,
          "Unit": "1"
        }
      },
      {
        "Number": 5,
        "AD": "A",
        "Value": {
          "Value": 25.3,
          "Unit": "1"
        }
      },
      {
        "Number": 6,
        "AD": "A",
        "Value": {
          "Value": 19.9,
          "Unit": "1"
        }
      },
      {
        "Number": 7,
        "AD": "A",
        "Value": {
          "Value": 26.9,
          "Unit": "1"
        }
      },
      {
        "Number": 8,
        "AD": "A",
        "Value": {
          "Value": 19.9,
          "Unit": "1"
        }
      },
      {
        "Number": 9,
        "AD": "A",
        "Value": {
          "Value": 29.8,
          "Unit": "1"
        }
      }
    ],
    "Outputs": [
      {
        "Number": 1,
        "AD": "D",
        "Value": {
          "Value": 1,
          "Unit": "43"
        }
      },
      {
        "Number": 2,
        "AD": "D",
        "Value": {
          "Value": 0,
          "Unit": "43"
        }
      },
      {
        "Number": 6,
        "AD": "A",
        "Value": {
          "State": 0,
          "Value": 0,
          "Unit": "0"
        }
      },
      {
        "Number": 12,
        "AD": "A",
        "Value": {
          "State": 1,
          "Value": 70,
          "Unit": "8"
        }
      },
      {
        "Number": 13,
        "AD": "A",
        "Value": {
          "State": 1,
          "Value": 5,
          "Unit": "13"
        }
      }
    ],
    "DL-Bus": [
      {
        "Number": 1,
        "AD": "A",
        "Value": {
          "Value": 483,
          "Unit": "3"
        }
      },
      {
        "Number": 2,
        "AD": "A",
        "Value": {
          "Value": 25.4,
          "Unit": "1"
        }
      }
    ]
  },
  "Status": "OK",
  "Status code": 0
}


Die Antwort ist natürlich nicht schwer zu verstehen für mich, aber mein Perl-Verständnis verabschiedet sich bei der Verschachtelung und den Arrays zwischendrin.

Vorschweben würde mir ein Modul, dass die Daten holt (sehr unspektakulär), wo man aber zB mit einem Attribut readingsConfig oder inputReadings mit Leerzeichen getrennt Namen vergeben kann. Die Werte werden dann automatisch einem Reading mit sprechendem Namen zugeordnet.

Ich hoffe, das ist soweit verständlich.
Das Modul würde ich schon bauen, aber ich scheitere wie gesagt am Auslesen der Daten.

Danke
schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

rudolfkoenig

ZitatMacht json2reading das selbe wie das Attribut extractAllJSON in HTTPMOD?
Weiss nicht genau, da ich extractAllJSON nicht genau kenne.
Soweit ich sehe, braucht extractAllJSON das JSON Perl Modul. json2reading ist eine reine Perl Implementierung, und kam mit MQTT2_DEVICE. Da ich MQTT2_SERVER/MQTT2_DEVICE einfach fuer den Anwender halten wollte, wollte ich keine externe Module einsetzen.

json2reading baut aus den gezeigten JSON folgende Readings:     2018-10-12 16:55:18   Data_DL-Bus_1_AD A
     2018-10-12 16:55:18   Data_DL-Bus_1_Number 1
     2018-10-12 16:55:18   Data_DL-Bus_1_Value_Unit 3
     2018-10-12 16:55:18   Data_DL-Bus_1_Value_Value 483
     2018-10-12 16:55:18   Data_DL-Bus_2_AD A
     2018-10-12 16:55:18   Data_DL-Bus_2_Number 2
     2018-10-12 16:55:18   Data_DL-Bus_2_Value_Unit 1
     2018-10-12 16:55:18   Data_DL-Bus_2_Value_Value 25.4
     2018-10-12 16:55:18   Data_Inputs_1_AD A
     2018-10-12 16:55:18   Data_Inputs_1_Number 1
     2018-10-12 16:55:18   Data_Inputs_1_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_1_Value_Value 57.3
     2018-10-12 16:55:18   Data_Inputs_2_AD A
     2018-10-12 16:55:18   Data_Inputs_2_Number 2
     2018-10-12 16:55:18   Data_Inputs_2_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_2_Value_Value 35.8
     2018-10-12 16:55:18   Data_Inputs_3_AD A
     2018-10-12 16:55:18   Data_Inputs_3_Number 3
     2018-10-12 16:55:18   Data_Inputs_3_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_3_Value_Value 9999.9
     2018-10-12 16:55:18   Data_Inputs_4_AD A
     2018-10-12 16:55:18   Data_Inputs_4_Number 4
     2018-10-12 16:55:18   Data_Inputs_4_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_4_Value_Value 67.9
     2018-10-12 16:55:18   Data_Inputs_5_AD A
     2018-10-12 16:55:18   Data_Inputs_5_Number 5
     2018-10-12 16:55:18   Data_Inputs_5_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_5_Value_Value 25.3
     2018-10-12 16:55:18   Data_Inputs_6_AD A
     2018-10-12 16:55:18   Data_Inputs_6_Number 6
     2018-10-12 16:55:18   Data_Inputs_6_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_6_Value_Value 19.9
     2018-10-12 16:55:18   Data_Inputs_7_AD A
     2018-10-12 16:55:18   Data_Inputs_7_Number 7
     2018-10-12 16:55:18   Data_Inputs_7_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_7_Value_Value 26.9
     2018-10-12 16:55:18   Data_Inputs_8_AD A
     2018-10-12 16:55:18   Data_Inputs_8_Number 8
     2018-10-12 16:55:18   Data_Inputs_8_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_8_Value_Value 19.9
     2018-10-12 16:55:18   Data_Inputs_9_AD A
     2018-10-12 16:55:18   Data_Inputs_9_Number 9
     2018-10-12 16:55:18   Data_Inputs_9_Value_Unit 1
     2018-10-12 16:55:18   Data_Inputs_9_Value_Value 29.8
     2018-10-12 16:55:18   Data_Outputs_1_AD D
     2018-10-12 16:55:18   Data_Outputs_1_Number 1
     2018-10-12 16:55:18   Data_Outputs_1_Value_Unit 43
     2018-10-12 16:55:18   Data_Outputs_1_Value_Value 1
     2018-10-12 16:55:18   Data_Outputs_2_AD D
     2018-10-12 16:55:18   Data_Outputs_2_Number 2
     2018-10-12 16:55:18   Data_Outputs_2_Value_Unit 43
     2018-10-12 16:55:18   Data_Outputs_2_Value_Value 0
     2018-10-12 16:55:18   Data_Outputs_3_AD A
     2018-10-12 16:55:18   Data_Outputs_3_Number 6
     2018-10-12 16:55:18   Data_Outputs_3_Value_State 0
     2018-10-12 16:55:18   Data_Outputs_3_Value_Unit 0
     2018-10-12 16:55:18   Data_Outputs_3_Value_Value 0
     2018-10-12 16:55:18   Data_Outputs_4_AD A
     2018-10-12 16:55:18   Data_Outputs_4_Number 12
     2018-10-12 16:55:18   Data_Outputs_4_Value_State 1
     2018-10-12 16:55:18   Data_Outputs_4_Value_Unit 8
     2018-10-12 16:55:18   Data_Outputs_4_Value_Value 70
     2018-10-12 16:55:18   Data_Outputs_5_AD A
     2018-10-12 16:55:18   Data_Outputs_5_Number 13
     2018-10-12 16:55:18   Data_Outputs_5_Value_State 1
     2018-10-12 16:55:18   Data_Outputs_5_Value_Unit 13
     2018-10-12 16:55:18   Data_Outputs_5_Value_Value 5
     2018-10-12 16:55:18   Header_Device   87
     2018-10-12 16:55:18   Header_Timestamp 1539361037
     2018-10-12 16:55:18   Header_Version  3
     2018-10-12 16:55:18   Status          OK
     2018-10-12 16:55:18   Status_code     0

und damit vermutlich dem extractAllJSON sehr aehnliche. Was auch kein Wunder ist, da man die Namen automatisch generieren muss. Du kannst auch json2nameValue verwenden, was die Vorstufe von json2reading ist, und dann selbst entscheiden, was du wie zum Reading wandelst. Ist aber alles nur ein Angebot und keine Vorschrift.


P.S.:Habe gerade leichte Fixes fuer json2nameValue eingecheckt, damit man keine Fehlermeldungen beim Parsen von Leerzeichen an unerwateten Stellen bekommt.

delMar

Wow! json2nameValue funktionert haarscharf so, wie man es sich vorstellt und wie man's benötigt.
Hier wurde sehr sauber gearbeitet :-)

Ich bau da jetzt wie vorher angedroht ein Modul um dieses JSON herum und stell das dann hier rein.

schöne Grüße
Martin

Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Auf https://github.com/delMar43/FHEM/blob/master/72_TA_CMI_JSON.pm gibt's eine erste Version zum Testen.

Derzeit wird nur die UVR16x2 unterstützt und auch nur Input, Output und DL-Bus Inputs.
Wenn jemand Bedarf an weitergehender Unterstützung hat (siehe vorher erwähnte API-Doku), bitte Bescheid geben.
Ich will nix Implementieren, was nachher garniemand testen kann (schon garnicht ich selber).

defmod <name> TA_CMI_JSON <ip> <nodeId> <queryParams>
Die nodeId sieht man auf http://<ip>/#can.cgi Beim Bild der UVR16x2 steht Node: <id>
Die queryParams können I für Inputs, O für Outputs und D für DL-Bus sein. Wenn man alle drei holen will, gibt man hier I,O,D an (achtung, nur komma getrennt, keine Leerzeichen).

Beispiel:
defmod cmi TA_CMI_JSON 192.168.4.250 1 I,O,D

Intervall ist derzeit auf 70 Sekunden. Über get update kann man die Daten auch früher holen. Es gibt aber nur 1x pro Minute neue Daten.

Es werden nur jene Daten in Readings abgelegt, die auch Konfiguriert wurden.
Dafür gibts 3 Attribute:
* readingNamesInputs
* readingNamesOutputs
* readingNamesDL-Bus

Eine Beispiel-Konfig schaut so aus:
attr cmi readingNamesDL-Bus 1:Durchfluss_Solar 2:T.Solar_RL
dh, was vom DL-Bus auf 1 kommt, wird unter Durchfluss_Solar abgelegt.

geplante Features:
* Die Einheit möchte ich noch als weiteres Reading hinzufügen. zb Durchfluss_Unit l/h
* Konfigurierbarer Interval
* Unterstützen von Abfragen einzelner Daten. Laut Doku kann man zB I2 angeben, um nur Input Wert 2 abzufragen.

Wer was damit anfangen kann, bitte gerne Testen.
Wenn das Modul breiteren Anklang findet, reiche ich es gern als offizielles Modul ein.
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

Mounty-yo

Hallo Martin,

habe Dein Modul mit meinem CMI und dem UVR1611 ausprobiert. Fhem häng nach der installation und ich muss den Raspi neu starten.
Im Logfile steht dann folgendes:
2018.10.18 21:42:57 3: TA_CMI_JSON - Initialize done ...
Undefined subroutine &main::json2nameValue called at ./FHEM/72_TA_CMI_JSON.pm line 109.


An meinem CMI muss ich ein Passwort eingeben. Wie kann ich das mit Deinem Modul machen ?
So habe ich es auch pobiert, geht aber nicht:
define cmi TA_CMI_JSON xxx:xxx@192.168.178.85 1 I,O,D

2018.10.18 21:38:30 0: error while requesting http://xxx:xxx192.168.178.85/INCLUDE/api.cgi?jsonnode=1&jsonparam=I,O,D - http://xxx:xxx172.168.178.85/INCLUDE/api.cgi?jsonnode=1&jsonparam=I,O,D: malformed or unsupported URL
Undefined subroutine &main::json2nameValue called at ./FHEM/72_TA_CMI_JSON.pm line 109.


Der CMI liefert aber Werte :
192.168.178.85/INCLUDE/api.cgi?jsonnode=1&jsonparam=I,O,D
{ "Header":{ "Version":3, "Device":"80", "Timestamp":1539899696 }, "Data":{ "Inputs":[ { "Number":1, "AD":"A", "Value":{ "Value":14.9, "Unit":"1" } } , { "Number":2, "AD":"A", "Value":{ "Value":30.0, "Unit":"1" } } , { "Number":3, "AD":"A", "Value":{ "Value":43.3, "Unit":"1" } } , { "Number":4, "AD":"A", "Value":{ "Value":45.1, "Unit":"1" } } , { "Number":5, "AD":"A", "Value":{ "Value":30.4, "Unit":"1" } } , { "Number":6, "AD":"A", "Value":{ "Value":28.5, "Unit":"1" } } , { "Number":7, "AD":"A", "Value":{ "Value":14.3, "Unit":"1" } } , { "Number":8, "AD":"A", "Value":{ "Value":50.3, "Unit":"1" } } , { "Number":9, "AD":"A", "Value":{ "Value":48.2, "Unit":"1" } } , { "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":12, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":13, "AD":"A", "Value":{ "Value":32.2, "Unit":"1" } } , { "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":15, "AD":"D", "Value":{ "Value":0, "Unit":"43" } } , { "Number":16, "AD":"D", "Value":{ "Value":1, "Unit":"43" } } ], "Outputs":[ { "Number":1, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":2, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":3, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":4, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":5, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":6, "AD":"A", "Value":{ "State":0,"Value":0, "Unit":"0" } } , { "Number":7, "AD":"A", "Value":{ "State":1,"Value":30, "Unit":"0" } } , { "Number":8, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":9, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":12, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } , { "Number":13, "AD":"D", "Value":{ "Value":0, "Unit":"0" } } ]}, "Status":"OK", "Status code":0 }

delMar

Oh Mann, da geht ja alles schief.
Sorry, und danke für die Logs, die helfen sicher.

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Oh, du musst dein fhem updaten.
Json2nameValue ist relativ neu.

,update' hilft
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Achja: das Passwort ist derzeit das default.
Wenn du Werte kriegst, dürfte es passen :)
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

Mounty-yo

Hallo Martin,

auf das update hätte ich auch kommen können.
Jetzt funktioniert es  8)

Werde die Tage mal die einzelnen Werte als readings anlegen. Ein paar Testreadings funktionieren.

Werde berichten.

Jörg