NEWS
WIFFI-WZ 2.0
-
Skript zum Abfragen der Messwerte des WIFFI-wz 2.0
Das ioBroker Skript zum WIFFI-wz:
! ```
var request = require("request"); ! var pfad = "WIFFI" + "."; var url = 'http://172.16.130.195/?json:'; ! // TODO: // ! function timeLastData() { return formatDate(new Date(), "DD.MM, hh:mm:ss"); } ! function parseJson(text) { if (text === "") return {}; try { json = JSON.parse(text); } catch (ex) { json = {}; } if(!json) json = {}; return json; } ! function readJson(url, callback) { request(url, function (err, state, body){ if (body) { var json = parseJson(body); callback(null, json); } else { var error = "(" + err + ") ERROR bei Abfrage von: " + url; log(error, "warn"); callback(error, null); } }); } ! function readVars() { readJson(url, function(err,json) { if(!err) { var myJson = json; var dPname, init; var anzahlVars = myJson.vars.length; for (var i = 1; i < anzahlVars; i++) { dPname = pfad + myJson.vars[i].homematic_name; init = myJson.vars[i].value; setState(dPname, init); } for (var systeminfo in myJson.Systeminfo) { dPname = pfad + "Systeminfo." + systeminfo; init = myJson.Systeminfo[systeminfo]; setState(dPname, init); } setState(pfad + "LetzteAbfrage",timeLastData()); var statusNe = getState(pfad + "Last_State_Count").val; if (statusNe < 0) { setState(pfad + "Last_State_Count",0); } else { setState(pfad + "Last_State_Count",statusNe + 1); } log("WIFFI Daten aktualisiert: " + url,"debug"); } else { log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn"); if (statusNe > 0) { setState(pfad + "Last_State_Count",0); } else { setState(pfad + "Last_State_Count",statusNe - 1); } } }); } ! function createDpFromJson(myJson) { var dpname = ""; var name = ""; var forceCreation = true; var common; var init; var type, desc, unit; var anzahlVars = myJson.vars.length; for (var i = 1; i < anzahlVars; i++) { dPname = pfad + myJson.vars[i].homematic_name; init = myJson.vars[i].value; type = myJson.vars[i].type; desc = myJson.vars[i].desc; name = desc; unit = myJson.vars[i].unit.replace('grad','°'); common = '{"desc":"' + desc + '","type":"' + type + '","unit":"' + unit + '","role":"value"' +',"name":"' + name + '"}'; common = JSON.parse(common); createState(dPname, init , forceCreation, common); //createState(dPname, init); log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info"); } for (var systeminfo in myJson.Systeminfo) { dPname = pfad + "Systeminfo." + systeminfo; init = myJson.Systeminfo[systeminfo]; common = '{"name":"'+systeminfo+'","desc":"'+systeminfo+'","role":"value"}'; common = JSON.parse(common); log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info"); createState(dPname, init , forceCreation, common); } createState(pfad + "System.Modultyp",myJson.modultyp); createState(pfad + "System.url",url.replace("json:","xpert:0:")); createState(pfad + "Last_State_Count",0,true); createState(pfad + "LetzteAbfrage" ,timeLastData()); createState(pfad + "Skriptstart" ,timeLastData()),true; createState(pfad + "Control_GetData",false,true, {"name":"Daten mit true manuell abrufen","type":"boolean","role":"value"}); } ! function createDp() { readJson(url, function (err,json) { if(!err) { var myJson = json; createDpFromJson(myJson); log("WIFFI Datenpunkte angelegt/aktualisiert"); } else { log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","error"); log("Keine Datenpunkte angelegt. Skript beendet","error"); return; } }); } ! function createOn() { var dpId = "javascript." + instance + "." + pfad + "Control_GetData"; on({id: dpId ,change:'any'}, function (obj) { log(obj.state.val,"warn"); if(obj.state.val) { readVars(); } }); ! schedule("*/1 * * * *", function () { // jede Minute die Werte abfragen readVars(); }); ! } ! function main() { readVars(); } ! // Skriptstart ! createDp(); setTimeout(createOn, 3000); setTimeout(main, 3000);
! Infos zum WIFFI-wz 2.0:
! (http://www.stall.biz/project/der-wiffi- ... mmersensor)
! Folgende Messwerte werden durch das WIFFI-wz 2.0 erzeugt:
! Und die Datenpunkte, die das Skript in ioBroker anlegt und pflegt:
! Der WIFI WZ enthält folgende Sensoren:* ~~[*]~~Temperatur * ~~[*]~~Luftfeuchtigkeit * ~~[*]~~2x Bewegungsmelder * ~~[*]~~Geräuscherkennung * ~~[*]~~Luftdruck * ~~[*]~~Helligkeit in Lux >! Dazu werden vom WIFFI-wz folgende Werte errechnet: ~~~~* ~~[*]~~Sonne-Elevation * ~~[*]~~Sonne-Azimut >! **~~[b]~~Einbindung in ioBroker:[/b]** >! **~~[b]~~1.) wenn keine CCU vorhanden ist:[/b]** >! - über das Skript oben >! - Abfrage der Werte des WIFFIs jede Minuten >! - Abfrage per Control-Datenpunkt >! Die Werte werden jede Minute aktualisiert (für Anwendungen mit den Bewegungsmeldern ist das unter Umständen zu lange). >! TODO: >! Die Meldungen des WIFFIs (Push der Messwerte bei Änderung) mit ioBroker verarbeiten. Aktueller Stand. Ich kann zwar die stündlcihen Statusmeldungen empfangen und verarbeiten, nicht aber die Messwerte, obwohl sie in identischer Form geschickt werden. >! **~~[b]~~2\. Wenn eine CCU vorhanden ist[/b]** >! - Das WIFFI-wz kann per Push direkt Messwerte zur CCU schicken >! - dort müssen nur Systemvariablen angelegt werden, deren Namen im WIFFI angepasst werden können >! -------------- >! **~~[b]~~alter Inhalt vom » 15.04.2016, 20:02[/b]** >! Ich habe heute den WIFFI-wz 2.0 zusammengelötet und in Betrieb genommen. >! [http://www.stall.biz/project/der-wiffi- ... mmersensor](http://www.stall.biz/project/der-wiffi-wz-2-0-der-wohnzimmersensor) >! Funktioniert wunderbar und die neun Messwerte werden automatisch in Systemvariablen in die CCU2 geschrieben. >! Jetzt würde ich gerne versuchen, die Werte direkt in iobroker, ohne den Umweg über die CCU2, zu verarbeiten. >! Zwei Wege fallen mir ein: >! 1.) die html Seite des WIFFI-wz 2.0 parsen >! 2.) die "Meldungen" des WIFFI-wz zu ioBroker statt zur CCU2 schicken und dort direkt auswerten >! Die 2\. Variante gefällt mir besser. Auf Anhieb bin ich leider nicht fündig geworden, auf welche Art und Weise man über Web die Systemvariablen der CC2 füllen kann. Hat da jemand Erfahrung (Port-Nummer, wie sieht die Meldung aus, um z.B. eine Systemvariable mit dem Namen **~~[b]~~wz_feuchte[/b]** in der Homematic mit einem Wert zu beschreiben?). >! Ich könnte jetzt mit Wireshark tragen. Denke aber, dass es hier genug Spezis gibt, die das "mal eben" beantworten können :magreren: >! [EDIT] >! OK. Hab was gefunden. >! `~~[code]~~http://172.16.130.199:8181/test.exe?out=dom.GetObject(%22wz_temp%22).State(%2212%22),r)[/code]` >! Damit wird der Wert der Variable **~~[b]~~wz_twmp[/b]** auf den Wert **~~[b]~~12[/b]** gesetzt. >! Jetzt muss ich "nur" schauen, wie man das in iobroker verarbeiten kann. Eventuell den Adapter **~~[b]~~simple-api[/b]** anpassen...[/i][/i][/i][/i][/i][/i][/i] ```
-
Hi ruhr, mir fällt da noch was ein: Frag den erbauer des wiffi wz ob er die möglichkeit einbaut das ziel selber zu definieren. ioBroker hat eine Schnittstelle die nach dem selben prinzip funktioniert.
Gesendet von meinem Jolla mit Tapatalk
-
@Jey Cee:Hi ruhr, mir fällt da noch was ein: Frag den erbauer des wiffi wz ob er die möglichkeit einbaut das ziel selber zu definieren. ioBroker hat eine Schnittstelle die nach dem selben prinzip funktioniert.
Gesendet von meinem Jolla mit Tapatalk `
Wie meinst Du das denn?
Das Ziel in Form der IP kann man festlegen und die Variablennamen ebenfalls.
Jetzt müsste man "nur" die Meldung oben annehmen und den String auswerten.
-
Der wiffi wz verwendet eine api der ccu2 und der teil ist nicht im wiffi wz einstellbar. IoBroker hat eine api die der ccu2 ähnelt, müsste die simple api sein.
Gesendet von meinem Jolla mit Tapatalk
-
Hallo ruhr70,
das sind doch Fragen bei denen ich denke, dass Eugen die gerne beantwortet, wenn du ihn fragst.
EDIT:
Der Kern ist ein ESP8226-12, der sich wohl wie ein Arduino programmieren lässt (habe ich von beidem keine Ahnung)
Habe trotzdem gegoogelt und https://www.symcon.de/forum/threads/27549-WiFi-Modul-ESP8266im ersten post eine Linksammlung gefunden, die dir vielleicht weiterhilft.
Gruß
Rainer
-
Danke für die Antworten…
Ich war schon einen Schritt weiter.
Der WIFFI-wz hat sich stündlich mit seiner IP beim ioBroker-Testrechner gemeldet (ich habe im WIFFI-wz die ioBroker IP eingestellt, anstatt der IP der CCU2).
Es kam bei ioBroker auf Port 8181 folgendes an "/xy.exe?antwort=dom.GetObject("wz_ip").State("172.16.130.195")", abgefragt über ein Miniskript, welches mit dem Node Module "http" einen Mini-Webserver aufgemacht hat.
Vom WIFFI-wz werden die Datenpunkte per http auf den Port 8181 (Homematic Skript) und er Homematic Skriptsprache übertragen.
In der Theorie hätten auch die Werte der Messpunkte identisch ankommen müssen :? . Da ist über das Skript allerdings nichts eingetrudelt. Zu CCU2 wurden die Werte übertragen…
...warum "wurde"...?
Da ich nicht wirklich weiterkam, habe ich dann die neue Firmware (30) eingespielt, die seit gestern verfügbar ist. Und das war es dann ganz mit dem WIFFI-wz
Nach Anleitung vorgegangen. Quittung mit OK und ein paar Sekunden danach wurde der WIFFI-wz in eine Dauersirene mit zwei dauerleuchtenden LEDs verwandelt. Ausser Krach und Licht macht er jetzt gar nichts mehr :shock:
-
Ausser Krach und Licht macht er jetzt gar nichts mehr :shock: `
Oh Sh….Neunmalklug an:
` > 16. Rückstellen in WerkszustandManchmal kann es notwendig sein, die im EEPROM abgelegten Daten zu löschen und den WIFFI-WZ in den Auslieferungszustand zu versetzen. Hierfür wird durch 1sec-Drücken des PROG-Tasters zuerst der Hotspot-Modus eingestellt, was durch 1sec- Blinken der roten LED angezeigt wird. Danach hält man den PROG-Taster solange gedrückt, bis die rote LED dauerhaft leuchtet. Jetzt werden die EEPROM-Daten gelöscht.
Läßt man die PROG-Taste wieder los, dann startet WIFFI neu und geht automatisch in den Hotspot-Modus, um so wieder neu an den Router angelernt zu werden.
Achtung: nie den PROG- und RESET-Taster gleichzeitig drücken, da das Modul dann in den Programmiermodus geht und u.U. die Firmware beschädigt wird. `
Das hast du natürlich längst versucht!Viel Glück
Rainer
-
Danke Rainer. Bin für jeden Tipp dankbar.
Und ja, das hatte ich schon versucht. Habe auch brav nie beide Taster gleichzeitig gedrückt.
Da die rote LED nie ausgeht, hat man kein optisches Feedback, ob der Weg zu den Werkseinstellungen funktioniert. Hab es mehrmals versucht. Geht nicht mehr. Nach fünf Minuten Dauerlärm (Buzzer) musste ich auch alle weiteren Versuch einstellen (per off/on, Suche im WLAN, …). Wurde für die bessere Hälfte zu unangenehm.
Aber der Buzzer ist schön laut
-
Aber der Buzzer ist schön laut `
Wahrscheinlich der Grund dafür:
http://homematic-forum.de/forum/viewtop … 54#p274454
Auf Eugens Seite gibt es die Möglichkeit eine Nachricht zu hinterlassen - oder PN im HM-Forum - oder ganz offen im Forum Frage stellen.
Selbst wenn du jetzt der erste gewesen sein solltest - du wirst nicht der Letzte sein.
Gruß
Rainer
-
Ein kleiner Zwischenstand…
Es war definitiv mein Fehler
Ich war von der Homematic so gewohnt, die gepackte Datei hochzuladen. Hier habe ich glatt überlesen, dass es die dort enthaltene *.bin sein muss. Leider habe ich zur ZIP gegriffen :shock:
[EDIT] Habe eine Rückmeldung erhalten, dass es eine 95% Chance gibt, es zu reparieren
-
Der neue Zwischenstand:
Mein WIFFI funktioniert wieder
Eugen war so nett und hat meinen Fehler beseitigt!
In der nächsten Firmware können die Werte des WIFFIs im JSON abgefragt werden
Ich schreib ein kurzes Skript, welches dann einfach mehrere WIFFIs verwalten kann, die Datenpunkte anlegt und die Werte automatisch aktualisiert.
Infos und Screenshots folgen.
-
Ich habe im ersten Post das Skript für den WIFFI-WZ 2.0 abgelegt. Erst einmal für einen (das Skript kann einfach mehrmals je WIFFI verwendet werden). Anmerkungen dazu im ersten Post.
-
Hallo ruhr70,
ich war heute bei eugen und bin jetzt ebenfalls Besitzer eines Wiffis.
Habe ihn mit Eugens Hilfe auch relativ schnell in die CCU eingebunden bekommen.
Jetzt habe ich auch dein Skript kopiiert und gestartet - läuft.
Datenpunkte werden im Moment noch nicht angelegt.
Aktueller Stand. Ich kann zwar die stündlcihen Statusmeldungen empfangen und verarbeiten, nicht aber die Messwerte, obwohl sie in identischer Form geschickt werden. `
Eugen war der Meinung, dass du es bereits hinbekommen hättest.Wenn nicht, dann bitte kurze Info, ich setze mich dann nochmal mit ihm zusammen. Oder ich bekomme ihn hier ins Forum
@Bluefox: Solltest du das hier lesen bitte nicht in operative Hektik verfallen :!: , du hast genug andere Baustellen!
Gruß
Rainer
-
Hi Rainer,
das Skript läuft, es werden aber keine Datenpunkte angelegt?
Das muss eingentlich funktionieren.
Gesendet von iPhone mit Tapatalk
-
KEINE ist vielleicht nich ganz richtig:
Aber ich dachte, dass da auch ein Datenpunkt mit dem json Feld angelegt würde.
Das parsen hast du ja noch auf der ToDo.
Oder schickt der Wiffi die Antwort an die CCU, wenn ich diese noch im Wiffi konfiguriert habe?
Geht es nicht Daten vom Wiffi an die CCU zu pushen und von ioBroker zu pollen?
Gruß
Rainer
-
das Skript legt für jeden Messwert einen Datenpunkt an und holt die Daten beim Skriptstart vom WIFFI ab.
Zusätzlich werden die Daten per Schedule abgeholt.
Im WIFFI kann man eine CCU IP eintragen. Dort "pusht" das WIFFI die Daten bei Änderung. Wenn Du die Variablen in der CCU angelegt hast, holt sich ioBroker sie ab (hm-rega).
ich wollte noch, dass das WIFFi die Daten direkt an ioBroker schickt, wenn man als CCU IP die ioBroker IP konfiguriert. D.h. die CCU würde keine Daten mehr erhalten, sondern nur noch ioBroker.
Die stündlichen "ich lebe noch" Meldungen konnte ich empfangen. Die Messwerte komischerweise noch nicht. Ab hier habe ich derzeit das Messer im Schwein stecken lassen.
also was derzeit geht:
Datenpunkte über das Skript anlegen lassen und per Schedule regelmäßig aktualisieren.
und/oder
Daten an die CCU und dann per hm-rega an ioBroker
Gesendet von iPhone mit Tapatalk
-
… ich lese mit Interesse mit!
Können denn die ursprünglich an die Homematic gesendeten Push Meldungen schon ausgewertet werden ( wenn natürlich anstelle der CCU-IP die IObroker-IP eingegeben ist ) ?
Wenn das klappt, dann kann man ja auf das regelmässige Polling verzichten , oder ? (macht die CCU ja auch nicht!)
-
also was derzeit geht:
Datenpunkte über das Skript anlegen lassen und per Schedule regelmäßig aktualisieren.
und/oder
Daten an die CCU und dann per hm-rega an ioBroker `
letzteres funktioniert.Ersteres nicht
Auch nicht bei restart des Skripts.
Was muss ich löschen, damit das Anlegen der Variablen bei einem Neustart des Skripts neu initialisiert wird?
Oder habe ich das falsche Skript?
Gruß
Rainer
-
Hallo Eugen!
Willkommen hier im Forum.
Hast du es jetzt doch noch geschafft :mrgreen:
Freue mich auf weiteren Input.
Gruß
Rainer
-
… ich lese mit Interesse mit!
Können denn die ursprünglich an die Homematic gesendeten Push Meldungen schon ausgewertet werden ( wenn natürlich anstelle der CCU-IP die IObroker-IP eingegeben ist ) ?
Wenn das klappt, dann kann man ja auf das regelmässige Polling verzichten , oder ? (macht die CCU ja auch nicht!) `
ne, das wird gehen, da steckt aber noch das besagte Messer.
kommt aber
Gesendet von iPhone mit Tapatalk