Seite 1 von 2

Daten zum LMA senden?

Verfasst: Di 26. Nov 2019, 21:14
von Thomas
Bin gerade dabei, die Verbindung zwischen meinem LMA und iobroker etwas auszubauen und hab da ein kleines Problem beim Einbinden von unserer Heizung (nur Warmwasserkessel).

Folgendes ist realisiert:
Befehl an Alexa "Warmwasser an" (ist ne Einmalladung für ca. 45 min) oder auch Szene in der Visualierung ausgelöst -> löst eine Szene auf LMA aus mit einem HTTP-GET. Damit geht dieser Befehl an die api vom iobroker (sehr gut dokumentiert!) und der steuert den Bosch-Adapter an (für die Buderus-Heizung). Funktioniert gut. Die Adapter muss man nur installieren, wenig konfigurieren und läuft!
Befehl an Alexa "Warmwasser aus" funktioniert auch (stoppt vorzeitig die Warmwasserproduktion).

Jetzt soll aber auf Wunsch meiner Frau auch noch die aktuelle Wassertemperatur angezeigt oder angesagt werden (wozu eigentlich?). Jedenfalls hab ich die Wassertemperatur in einem nodejs Objekt in iobroker gespeichert und bin am überlegen, ob ich die irgendwie umgekehrt in den LMA hineinkriege (möglichst in einen der 10 Temperaturkanäle, wovon ich dann einen missbrauchen würde für eigene Zwecke). Dann könnte man Alexa schön nach der Temperatur Warmwasser fragen.
Den Zugriff auf die weather.json hat man schnell realisiert und mit dem kleinen Skript hab ich es auch erfolgreich getestet (welches in iobroker läuft):

const request = require('request');
request('http://192.168.*.*/weather.json', function(err, response, body) {
let json = JSON.parse(response.body);
console.log(JSON.stringify(json.channel0.temperature));
});

Dann kriegt man schon mal die Temperatur von Channel0 auf der Konsole angezeigt. Natürlich werden später die benötigten Daten nicht auf Konsole ausgegeben, sondern ordentlich in objekte geschrieben zur weiteren Verwendung in iobroker. Das oben ist nur Spielerei.

Die aktuellen Werte aus der weather.json sind damit auf dem iobroker und können dort bearbeitet werden.
So, der Warmwasserwert aus der Heizung soll aber nun umgekert an den LMA. Jetzt müsste ich entweder den einzelnen Temperaturwert (z.B. aus channel0) an den LMA schicken oder auch die ganze, nur an dieser Stelle geänderte weather.json an den LMA . Bevor ich hier lang probiere und recherchiere, frag ich einfach mal ganz blöd in die Runde:

- hab ich überhaupt Schreibrechte auf den LMA? Werden Änderungen bzw. Datenübergaben über WLAN irgendwie akzeptiert?
- wenn ja, wie könnte ich das grundsätzlich realisieren?

Szenen auslösen auf dem LMA geht natürlich, hilft aber nicht so recht weiter. Irgendwie möchte ich einem Objekt (z.B. dem Temperaturkanal0 auf dem LMA) eben die aktuelle Temperatur des Warmwasserkessels übergeben. Einen Bresser-Sensor kann ich physikalisch ja nicht reinhängen. Den Wert aus dem iobroker einem Funksender zu übergeben, der dann wiederum dem LMA einen Bresser-Sensor vorgaukelt, ist mir zu aufwändig und zu teuer (mir fehlt da die Ausstattung).

Gibt ja leider noch kein Interface zwischen iobroker und LMA, aber vielleicht hat jemand Erfahrung mit Schreiben eines Wertes in die weather.json oder kann ein einfachstes Inferface für diese Datenübergabe zur Verfügung stellen (Tip vom Admin?)

Re: Daten zum LMA senden?

Verfasst: Di 26. Nov 2019, 21:52
von rtwl
Ich kenne mich mit iobroker genau gar nicht aus, aber kann alexa nicht die Temperatur direkt von iobroker erhalten und ausgeben?

Re: Daten zum LMA senden?

Verfasst: Di 26. Nov 2019, 23:35
von Thomas
rtwl hat geschrieben:
Di 26. Nov 2019, 21:52
Ich kenne mich mit iobroker genau gar nicht aus, aber kann alexa nicht die Temperatur direkt von iobroker erhalten und ausgeben?
ja natürlich kann ich die Temperatur zumindest visuell über iobroker ausgeben. Ob Alexa mir die jeweilige Temperatur auch ansagen kann, müsste ich mal überprüfen. Will ja nicht unbedingt 30 verschiedene Nachrichten vorformulieren ("das Wasser hat 25 Grad" "das Wasser hat 26 Grad") und dann Alexa jeweils eine von den 30 Nachrichten vorlesen lassen. Bei LMA kann ich einfach fragen "Alexa wie ist die Temperatur ...". Das hat doch was ... Aber damit ich sie nach der Temperatur fragen kann, muss der jbmedia-skill die Temperatur kennen. Der iobroker-skill kann glaub ich nicht solche Werte vorlesen.

Außerdem wollte ich es halt gerne unter einer Oberfläche behalten, so schlecht ist die Visualisierung von LMA nicht. Aber wenn ich keine Daten über irgendeine HTTP-Schnittstelle in den LMA reinkriege (außer über Sensoren) ist das natürlich ein Problem. Bei LMA bin ich gelandet, weil meine Olympia-Alarmanlage sich sehr einfach einbinden ließ.

Re: Daten zum LMA senden?

Verfasst: So 1. Dez 2019, 13:28
von Thomas
So, habe es jetzt mit Hilfe von ein paar Infos von jbmedia gelöst. Ich denke, die Infos sind kein Geheimnis, deshalb veröffentliche ich hier mal mein kurzes Script. Es läuft als Cron-Job in meinem iobroker (5 Minuten Intervall; Maximum wäre 10 Minuten lt. jbmedia).

Voraussetzungen: iobroker-Installation mit javascript-Adapter. Dort wird das Script manuell einmalig gestartet und läuft dann dauerhaft, mit jeweils 5 Minuten Ruhepause.
Es dürfte aber mit kleinen Anpassungen sinngemäß auf jedem anderen Gerät auch laufen.
Der Code ist als Anregung für eigene Entwicklungen gedacht. Angepasst werden müssen natürlich Kanal, ip-Adresse, Objekt-Adresse des auszulesenden Temperatur-Objekts. Wer will und kann (ich kann das nicht bzw. hab zu wenig Zeit), kann daraus und mit dem Adapter-Template aus iobroker auch einen eigenen Adapter schaffen.

Hier der kurze Code:
*****************************************************************************************************************
var dgram = require('dgram');
schedule('*/5 * * * *', function(){ //cronjob wiederholt das Auslesen und die Übertragung alle 5 Minuten

//Der JavaSkript Zugriff auf Objekte in iobroker erfolgt über die beiden Funktionen getState und setState.

var buf = getState('km200.0.dhwCircuits.dhw1.actualTemp').val; //Warmwassertemperatur auslesen aus iobroker-Objekt

var m1 = 'wdata,1'; //an Kanal 1 im LMA senden
var m2 = buf.toString().substring(0,2)+buf.toString().substring(3,4); //erst Warmwasser-Messwert in String
var m3 = '0'; //Feuchtigkeit immmer 0

var message = m1+','+m2+','+m3; //String Zusammensetzen, message wird dann als UDP gesendet
console.log(message); //Consolenmeldung nur zu Testzwecken

var client = dgram.createSocket('udp4'); //UDP Senden
client.send(message, 0, message.length, 30303, '192.168.0.67', function(err, bytes) {

//Kanal und IP-Adresse ggf. anpassen, 30303 ist der Port (fest)

if (err) console.log('Fehler beim Senden: ', err);
client.close();
});
});
***************************************************************************************************************

console.log dient nur zu Testzwecken und kann später entfernt werden. Hierdurch entsteht auch ein Eintrag ins Logbuch, welches dann wie folgt aussieht:

jjavascript.0 2019-12-01 12:50:01.329 info (555) script.js.common.Temperatur_Senden: wdata,1,430,0
javascript.0 2019-12-01 12:45:00.013 info (555) script.js.common.Temperatur_Senden: wdata,1,440,0
javascript.0 2019-12-01 12:40:00.004 info (555) script.js.common.Temperatur_Senden: wdata,1,450,0
javascript.0 2019-12-01 12:35:00.201 info (555) script.js.common.Temperatur_Senden: wdata,1,450,0
info.0 2019-12-01 12:34:08.035 info (377) Popup news was read...
javascript.0 2019-12-01 12:30:00.258 info (555) script.js.common.Temperatur_Senden: wdata,1,450,0

Der String "wdata,1,***,0" wird also recht zuverlässig alle 5 Minuten an den LMA übertragen. *** muss laut jbmedia die Temperatur *10 sein. 450 entspricht also einer Temperatur von 45,0 Grad, 430 einer Temperatur von 43,0 Grad. Meine Nachkommastellen übertrage ich nicht, da ich erst den Punkt in meinen Messwerten ausblenden müsste und für gemessen 43.4 Grad tatsächlich 434 übertragen müsste, dann würde der LMA wieder 43.4 anzeigen. War mir zu umständlich und unwichtig.
1 wird übertragen, weil der Temperaturkanal 1 angesprochen werden soll (darf angepasst werden).
0 wird übertragen, da Luftfeuchtigkeit unbekannt und hier auch unsinnig.

Die Temperatur wird auch in der Visulierung von jbmedia richtig angezeigt. Ich hab einen Raum "Warmwasser" geschaffen und diesem den Sensor 1 zugewiesen. Dieses Gerät "Warmwasser" kann man als Temperatursensor auch in Alexa finden.

Leider klappt das mit der Sprachausgabe nicht richtig. Alexa sagt mir zwar die Temperatur von "Wohnzimmer" richtig an. Wenn ich aber nach "Warmwasser" (oder alternativ "Badewasser") frage, so antwortet sie mir immer unsinnig: "Die durchschnittliche Temperatur im Haus beträgt 29 Grad". Offensichtlich gibt es hier einen Bug im Skill und Alexa liest nicht die Sensor-Temperatur, sondern bildet einen Durchschnitt aller Temperaturen (die meisten Räume etwas unter 20 Grad, das Warmwasser hebt dann den Durchschnitt ordentlich an auf knapp 30 Grad) :D

Vielleicht könnte man den Bug bei Alexa noch beseitigen? Wenn man übrigens bei LMA den Namen "Badewasserzimmer" vergibt, dann klappt die Sache gut und es werden die 44 Grad von Alexa gemeldet. Klingt aber bescheuert - weiß nicht ob da jbmedia was machen kann oder ob das an meiner Aussprach liegt oder Alexa sonstige Probleme mit dem Skill hat und nur "Zimmer" und "Raum" richtig versteht.

Ansonsten klappt die Temperaturübertragung gut. Wünschenswert wäre, auch andere Daten an einen "Universalsensor" des LMA nach gleichem Muster zu übertragen. Es würde genügen, wenn ein solcher "Universalsensor" einfach nur 0 / 1 akzeptieren würde (vielleicht noch True/false als String). Dann könnte man alle Zustände aus iobroker übertragen, wie z.B. Fenstersensoren, Bewegungsmelder, Rauchmelder, Alarmzustände u.a.

Re: Daten zum LMA senden?

Verfasst: So 1. Dez 2019, 18:09
von paulinchen
Thomas hat geschrieben:
Di 26. Nov 2019, 23:35
ja natürlich kann ich die Temperatur zumindest visuell über iobroker ausgeben. Ob Alexa mir die jeweilige Temperatur auch ansagen kann, müsste ich mal überprüfen. Will ja nicht unbedingt 30 verschiedene Nachrichten vorformulieren ("das Wasser hat 25 Grad" "das Wasser hat 26 Grad") und dann Alexa jeweils eine von den 30 Nachrichten vorlesen lassen. Bei LMA kann ich einfach fragen "Alexa wie ist die Temperatur ...". Das hat doch was ... Aber damit ich sie nach der Temperatur fragen kann, muss der jbmedia-skill die Temperatur kennen. Der iobroker-skill kann glaub ich nicht solche Werte vorlesen.
Klar kann der ioBroker das. ;)

Du kannst Dir den Alexa2-Adapter installieren und dort die gewünschte Antwort per speak-Kommando ausgeben. Im auszugebenden Text kannst Du dann einfach die Temperaturvariable einsetzen. Da muss man nicht mehrere Antworten definieren.
Damit die Antwort auf eine bestimmte Frage "Alexa, wie heiß ist das Badewasser?" kommt, legst Du einfach eine Javascript-Funktion an, welche auf die Frage das gewünschte speak-Kommando ausführt.

Re: Daten zum LMA senden?

Verfasst: Mo 2. Dez 2019, 23:45
von Thomas
paulinchen hat geschrieben:
So 1. Dez 2019, 18:09

Klar kann der ioBroker das. ;)

Du kannst Dir den Alexa2-Adapter installieren und dort die gewünschte Antwort per speak-Kommando ausgeben. Im auszugebenden Text kannst Du dann einfach die Temperaturvariable einsetzen. Da muss man nicht mehrere Antworten definieren.
Damit die Antwort auf eine bestimmte Frage "Alexa, wie heiß ist das Badewasser?" kommt, legst Du einfach eine Javascript-Funktion an, welche auf die Frage das gewünschte speak-Kommando ausführt.
Stimmt. Hatte den Adapter zwar installiert, aber nicht richtig angeschaut. Ist wirklich sehr flexibel, wenn man sich nicht nur vorformulierte Texte vorlesen lässt, sondern auch Objekte aus iobroker. Ich glaub, ich werde doch erst mal mehr mit iobroker/Alexa machen und diesbezüglich dem LMA tschüß sagen.

Re: Daten zum LMA senden?

Verfasst: Di 3. Dez 2019, 01:15
von Dos
Thomas hat geschrieben:
So 1. Dez 2019, 13:28
Dann könnte man alle Zustände aus iobroker übertragen, wie z.B. Fenstersensoren, Bewegungsmelder, Rauchmelder, Alarmzustände u.a.
Iobroker... da liegen eine Unmengen an Information und Möglichkeiten für den Air. Für mich nicht nachvollziehbar, dass JBMedia nicht auf den Zug aufspringt und hier eine Adapter baut... würde m.E den Air deutlich aufwerten.

Re: Daten zum LMA senden?

Verfasst: Di 3. Dez 2019, 08:46
von Thomas
Dos hat geschrieben:
Di 3. Dez 2019, 01:15

Iobroker... da liegen eine Unmengen an Information und Möglichkeiten für den Air. Für mich nicht nachvollziehbar, dass JBMedia nicht auf den Zug aufspringt und hier eine Adapter baut... würde m.E den Air deutlich aufwerten.
Ja, sehe ich auch so. Bei mir wird der Air zwar vermutlich nur zum Sammeln der Funksignale dienen, aber mit iobroker eigentlich ein gutes Tandem. Ich krieg auch alle Infos vom Air zum broker. Umgekehrt fehlt aber noch der Adapter oder zumindest eine Schnittstelle, die nicht nur Temperaturwerte annimmt (siehe oben), sondern beliebige Werte (boolean, kurze Strings).

Mal sehen, ob ich als Visualisierung den Air nehme oder doch eher VIS aus iobroker. Auch Alexa ist auf dem iobroker deutlich flexibler, so dass ich die Sprachausgabe jetzt wohl direkt vom iobroker mach. Mit dem Air kann ich jedenfalls gut meine Olympia-Alarmanlage ein- und ausschalten, da fehlt mir auf dem iobroker ein Adapter.

Re: Daten zum LMA senden?

Verfasst: Di 3. Dez 2019, 12:03
von Andy77
Ich würde mich hier mal ranhängen..

Also ich hab mir vor ein paar Tagen zum Spaß ioBroker mal auf meinen Windows PC installiert.
Ich experimentiere nur etwas damit rum (wenn der Rechner läuft). Das ganze klappt viel besser als ich erwartet habe. Habe meine HUE Bridge schon installiert, meine Shellys laufen, die Harmony. Ich habe Szenen erstellt.
Dann habe ich mich mal mit der Kommunikation zwischen ioBroker und LMA befasst. Ich habe also mal den simpleAPI Adapter installiert und kann nun mit diesem aus dem LMA Szenen oder auch einzelne Aktoren im ioBroker steuern. Die habe ich ich im LMA als Aktor angelegt (http).
Ich hoffe mal das ist so der richtige Weg?? Ist für mich alles noch ziemlich unübersichtlich, aber ich glaube der ioBroker ist eine ziemlich coole Sache wenn man mal durchblickt.
Was mich jetzt besonders interessiert, ist wie ich vom ioBroker den LMA anspreche.

Wenn ich mal hier halbwegs im Bilde bin, habe ich mir einen Rspberry 4 mit ioBroker und Homematic (da ich bereits einige Heizkörperthermostate und Wandthermostate ohne CCU in Aktion habe) zu installieren. Aber alles nach und nach

Re: Daten zum LMA senden?

Verfasst: Di 3. Dez 2019, 14:45
von Thomas
Andy77 hat geschrieben:
Di 3. Dez 2019, 12:03

Dann habe ich mich mal mit der Kommunikation zwischen ioBroker und LMA befasst. Ich habe also mal den simpleAPI Adapter installiert und kann nun mit diesem aus dem LMA Szenen oder auch einzelne Aktoren im ioBroker steuern. Die habe ich ich im LMA als Aktor angelegt (http).
Ich hoffe mal das ist so der richtige Weg?? Ist für mich alles noch ziemlich unübersichtlich, aber ich glaube der ioBroker ist eine ziemlich coole Sache wenn man mal durchblickt.
Was mich jetzt besonders interessiert, ist wie ich vom ioBroker den LMA anspreche.
Ja richtig. Du legst im Air einen LAN-Aktor an und kannst dann mittels http-Befehle auf den iobroker einwirken.
Umgekehrt kannst du auch aus dem iobroker heraus Szenen auf dem LMA mittels http-Befehle ansprechen und Szenen auslösen oder auch Lampen dimmen. In den FAQ ist das ausführlich beschrieben (z.B.: 192.168.1.100/control?scene=1).

Man kann aber keine Daten vom iobroker an den Air übergeben. Nur Temperaturwerte vom iobroker in den Air schreiben (immerhin, siehe hierzu mein kleines Skript weiter oben). Wünschenswert wäre es, auch andere Werte und Infos (Fenster offen, Heizung ausgefallen, Bewegungsmelder ausgelöst u.a. ) auf diese Weise zu übertragen. Da fehlt aber ein einfacher "Universal-Sensor", der solche http-Befehle mit Daten akzeptiert. Nur die Temperatur-Kanäle lassen sich beschreiben.

Mein Plan ist es, hier zwei optimal miteinander kommunizierende Systeme aufzustellen, und iobroker ist da ideal. Den Air brauch ich hauptsächlich für Funksignale und die Olympia-Alarmanlage.