http request ioBroker javascript vs. node-red

Nur externe Lösungen zu ioBroker/MQTT
Die eingebaute MQTT-Funktionalität bitte im entsprechenden Firmware-Forum besprechen. Danke!
uwe
Beiträge: 36
Registriert: Mi 21. Sep 2016, 16:44
Mäher: Husqvarna Automower 305
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2015
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: 1.0 beta 4

Re: http request ioBroker javascript vs. node-red

Beitrag von uwe » Mo 24. Apr 2017, 17:27

Hallo kleineMeise,

sorry, ich habe deine Anfrage ganz übersehen, war keine Absicht...

Ich hole die Werte in node-red über einen Status-Request http://xxx/json?cmd=status. Danach kannst du auf einen erfolgreichen Abruf (HTTP-Status-Code 200) prüfen und daraufhin den JSON-Parser aufrufen.
Daraufhin verarbeite ich die Variablen dann in einer function weiter.
Dort hast du dann das geparste JSON-Object schön im Zugriff.
2017-04-24 17_17_09-ioBroker.admin.jpg
2017-04-24 17_17_09-ioBroker.admin.jpg (49.21 KiB) 1357 mal betrachtet
Das Script in dem function node macht dann im Prinzip nur die Werte lesbar, damit ich sie in iobroker.vis anzeigen lassen kann. Gespeichert werden die Werte im Moment zum Teil in der CCU, teilweise auch in iobroker-Objekten. Da bin ich gerade am umstellen weg von der CCU-Speicherung auf iobroker.

Code: Alles auswählen

var status = "";
var stopped = false;
var statusdauer = "";
var mode = "";
var timer = "";
var timer_nextstart;
var maehzeit = 0;
var batterie = 0;
var wlan = 0;

if (msg.payload.successful) {
    
    var numhours = Math.floor(msg.payload.status.duration / 3600);
    var numminutes = Math.floor((msg.payload.status.duration % 3600) / 60);
    var numseconds = (msg.payload.status.duration % 3600) % 60;
    
    //node.warn("STATUS RAW.: " + msg.payload.status.duration);
    //node.warn("STATUSDAUER: " + numhours + ", " + numminutes + ", " + numseconds);
    statusdauer = numhours + "h " + numminutes + "m " + numseconds + "s";
    //node.warn("STATUSSTRING: " + statusdauer);
    if (msg.payload.status.stopped ) {
        stopped = "gestoppt";
    } else {
        stopped = "laeuft;"
    }
    maehzeit = msg.payload.status.hours;
    batterie = msg.payload.status.battery;
    wlan = msg.payload.wlan.signal;
    
    switch ( msg.payload.status.mode ){
        case 0:  mode = "Auto";
                 break;
        case 1:  mode = "Manuell";
                 break;
        case 2:  mode = "Home";
                 break;
        case 3:  mode = "Demo";
                 break;
        default: mode = "Unbekannt";
                 break;
    }
    switch ( msg.payload.timer.status ){
        case 0:  timer = "Deaktiviert";
                 break;
        case 1:  timer = "Aktiv";
                 break;
        case 2:  timer = "Standby";
                 timer_nextstart = msg.payload.timer.next.date + ", " + msg.payload.timer.next.time
                 break;
        default: timer = "Unbekannt";
                 break;
    }
    
    switch ( msg.payload.status.status ){
        case 0:  status = "Status wird ermittelt";
                 break;
        case 1:  status = "parkt";
                 break;
        case 2:  status = "maeht";
                 break;
        case 3:  status = "sucht Ladestation";
                 break;
        case 4:  status = "laedt auf";
                 break;
        case 5:  status = "sucht (Warten auf Umsetzen im Manuell-Modus)";
                 break;
        case 7:  status = "Fehler: " + msg.payload.error.error_message;
                 break;
        case 8:  status = "hat Schleifensignal verloren";
                 break;
        case 16: status = "ist abgeschaltet";
                 break;
        case 17: status = "schlaeft";
                 break;
        default: status = "unbekannter Status";
                 break;
    }
    
} else {
    status = "Statusabruf nicht erfolgreich";
}

global.set("statusAutoMower", msg.payload.status.status);

node.warn("statusAutoMower: " + global.get("statusAutoMower") + " = " + status);

return [    {payload:status}, 
            {payload:statusdauer}, 
            {payload:stopped},
            {payload:mode}, 
            {payload:timer},
            {payload:timer_nextstart},
            {payload:maehzeit},
            {payload:batterie},
            {payload:wlan} ];
In vis lass ich mir das ganze dann so anzeigen.
2017-04-24 17_20_03-vis.png
2017-04-24 17_20_03-vis.png (35.23 KiB) 1357 mal betrachtet
Für den Messerwechsel-Hinweis hab ich mir ein iobroker-Objekt definiert, welches die Standzeit des Messers enthält. Daraus und aus der Mähzeit errechne ich mir dann, wann der Hinweis angezeigt wird. Rückgesetzt wird das ganze dann über den Button und die Zeit läuft von vorne.

Gruß
Uwe
Dateianhänge
shaun.zip
(5.88 KiB) 57-mal heruntergeladen
vis.zip
(1.7 KiB) 54-mal heruntergeladen

kleinemeise
Beiträge: 20
Registriert: Mi 20. Apr 2016, 08:32

Re: http request ioBroker javascript vs. node-red

Beitrag von kleinemeise » Di 25. Apr 2017, 11:58

danke Uwe ;)

uwe
Beiträge: 36
Registriert: Mi 21. Sep 2016, 16:44
Mäher: Husqvarna Automower 305
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2015
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: 1.0 beta 4

Re: http request ioBroker javascript vs. node-red

Beitrag von uwe » Mi 26. Apr 2017, 12:02

Hallo,

ich hab das ganze nochmal ein bisschen überarbeitet, weil die Temperatur- und Regengeschichte eher suboptimal war.
Funktioniert schon ein bisschen besser, vor allem piepst Shaun nun nicht mehr andauernd. Ist aber sicher immer noch nicht der Weisheit letzter Schluß, weil im Moment jeder kleine Spritzer, der auf dem Regensensor landet, dazu führt, dass Shaun heimfährt. Siehe auch das P.S. unten. Da bin ich noch dran.
Falls es aber dennoch jemanden interessieren sollte.... => siehe Anhang.
Das lesen von Health ist im Moment abgeklemmt, weil immer dieselben Daten vom Modul kommen.

Ach ja: Beim Kopieren in node-red werden die Anmeldeinformationen für den Webzugriff nicht mitkopiert. Diese müssen in den entsprechenden http-request-Nodes also noch manuell eingetragen werden.

Gruß
Uwe

P.S.: Das gehört nun zwar absolut nicht hierher, aber vielleicht hat jemand von Euch Erfahrungen mit den Einstellungen vom HM-Sen-RD-O von Homematic, dass der ein wenig unempfindlicher wird. Aktuell sind die Standard-Einstellungen aktiv (s.u.)
2017-04-26 12_00_06-HomeMatic WebUI.png
2017-04-26 12_00_06-HomeMatic WebUI.png (14.75 KiB) 1301 mal betrachtet
Dateianhänge
shaunv2.zip
(6.27 KiB) 54-mal heruntergeladen

tesso
Beiträge: 32
Registriert: Mi 13. Jul 2016, 22:14
Mäher: Gardena R70Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2016
Robonect-Modul: Robonect Hx (Rev.2)
Robonect Firmware: 0.0

Re: http request ioBroker javascript vs. node-red

Beitrag von tesso » Fr 5. Mai 2017, 21:12

Wie hast du die iobroker Variablen angelegt?
Hast du da ein Skript für?
Ansonsten reichen mir auch die Variablen Typen und die Min/Max Werte.

Vielen Dank

PS: Ein Export des Objektbaumteils wäre ideal. :D

shufnagl
Beiträge: 9
Registriert: Mo 21. Aug 2017, 10:06
Mäher: Gardena smart SILENO+
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2016
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: 0.9c

Re: http request ioBroker javascript vs. node-red

Beitrag von shufnagl » Mo 28. Aug 2017, 21:39

Hallo,

bin gerade dabei einen ioBroker Adapter zu schreiben.

Status:
* Erste Abfragen funktionieren und werden in ioBroker States umgesetzt.
* Start/Stop ebenfalls.
* Es fehlt noch das "Feintuning" der vielen iobroker Objecte/States für Robonect (nicht meine Stärke).
* Ein VIS View fehlt auch noch.

Ich würde mich freuen wenn man die Arbeit gemeinsam koordinieren könnte. Mir geht es einfach darum eine perfekte Lösung für Robonect und ioBroker zu finden.

Danke

Stefan

uwe
Beiträge: 36
Registriert: Mi 21. Sep 2016, 16:44
Mäher: Husqvarna Automower 305
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2015
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: 1.0 beta 4

Re: http request ioBroker javascript vs. node-red

Beitrag von uwe » Mo 28. Aug 2017, 23:19

Hallo Stefan,

Super Sache!
Bin gerne bereit zu unterstützen, wenngleich ich auch vom programmieren von iobroker Modulen keine Ahnung habe.

Vg Uwe

uwe
Beiträge: 36
Registriert: Mi 21. Sep 2016, 16:44
Mäher: Husqvarna Automower 305
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2015
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: 1.0 beta 4

Re: http request ioBroker javascript vs. node-red

Beitrag von uwe » Di 29. Aug 2017, 00:22

Hallo,

ich bin mit meiner Automatisierung von Shauns Hütte von node-red weggekommen, weil es mir zu kompliziert geworden ist und habe das ganze in iobroker-javascript gebaut.

So sieht die Realisierung in der Zwischenzeit aus.

Vorhanden ist:
- eine Hundehütte, damit Shaun immer schön trocken steht ;)
- Rollladensteuerung von Homematic (HM-LC-Bl1-FM)
- passender Rollladen mit Motor mit Endschaltern
- Schleifensteuerung mit Homematic 4-fach-Aktor HM-LC-Sw4-WM
- Schaltaktor mit Messfunktion für Ladestation HM-ES-PMSw1-P
- Fenster-Kontakt HM-Sec-SCo für "Anwesenheitsanzeige" von Shaun[/list]

Rollladensteuerung
Hier habe ich mich an einem Beitrag hier im Forum orientiert (finde ihn leider gerade nicht). Die Timerprogrammierung vom Roboter kommt dabei nicht zum Einsatz - die Timer von Shaun stehen 24/7 auf EIN und Shaun steht per default auf HOME.
Die eigentliche Steuerung, wann gemäht werden soll, wird von iobroker vorgenommen. Die Einstellungen werden über vis gemacht.
Beim Einstellen der Timer im iobroker werden die alten schedules (sofern vorhanden) gelöscht und aus den eingetragenen Werten im javascript Strings für neue Start- und Stop-Schedules zusammengebaut, die die Zeiten repräsentieren und dann dynamisch gesetzt werden.
Wenn Shaun nun laut schedule starten soll, sendet iobroker das Öffnen-Kommando an den Rollladen. Nach einigen Sekunden wird AUTO an Shaun gesendet, worauf dieser mit per Fernstart mit Mähen beginnt. Fenrstart deshalb, weil die Hundehütte etwas zurückgesetzt steht. Wenn von Shaun der Status MÄHEN gelesen wird, wird der Rollladen geschlossen und die Schleife vor der Hütte geschlossen. Das hat den Grund, dass Shaun auf dem Rasen bleibt und nicht immer wieder gegen die Hütte rennt.
Wenn der Akku zuende geht, geht der Status von Shaun auf HEIMWEG, daraufhin wird die Schleife vor der Hütte geöffnet und der Rollladen hochgefahren.
Wenn Shaun zuhause ist und der Status auf LÄDT geht, wird der Rollladen geschlossen und Shaun bekommt das Kommando HOME geschickt.
Geht der Status bei vollem Akku auf SCHLÄFT und das programmierte Timerende ist noch nicht erreicht, beginnt das ganze von vorne.

Das Problem, wenn man das ganze mit den Timern von Shaun machen wollte ist, dass nicht sicher erkannt werden kann, wenn der Rollladen geöffnet werden muss (bei voll geladenem Akku, wenn der Timer noch aktiv ist).

Ist der eingestellte Zeitraum abgelaufen, dann bekommt Shaun per Stop-Schedule das HOME Kommando, und es beginnt wieder der gleiche Ablauf wie oben schon beschrieben.

Die freien Kontakte des 4-fach Aktors verwende ich zur externen "Anwesenheitsanzeige" (rote LED=unterwegs, grüne LED=zuhause) verwende, sowie eine rote LED mit Blinkschaltung, wenn das Tor aufgeht :)

So sieht das ganze von innen aus (hier ist noch nicht alles verkabelt):
IMG_0016.JPG
Hundehütte von innen
IMG_0016.JPG (87.32 KiB) 935 mal betrachtet
Die Scripts und der view (Seite "Details" ist noch in Arbeit) stehen im Anhang, falls es jemand interessiert.

In den Scripts sind noch Abfragen auf Regendauer in verschiedenen Zeiträumen eingebaut. Wenn die Werte überschritten werden, wird nicht gemäht. Bin noch am überlegen, die Schedules bei Regen um eine gewisse Zeit zu verschieben. Weiterhin ein Versand von Alarmmeldungen über Pushover und Ansteuerung eines MP3-Gongs (das klappt noch nicht ganz mit dem Zurücksetzen des Alarms...) und die Anzeige des Kamerabilds im view, aber nur wenn es etwas zu sehen gibt :)

VG Uwe
Dateianhänge
vis.zip
der View
(18.71 KiB) 25-mal heruntergeladen
shaun.zip
die zugehörigen Javascripts
(11.84 KiB) 25-mal heruntergeladen

shufnagl
Beiträge: 9
Registriert: Mo 21. Aug 2017, 10:06
Mäher: Gardena smart SILENO+
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2016
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: 0.9c

Re: http request ioBroker javascript vs. node-red

Beitrag von shufnagl » Di 29. Aug 2017, 08:15

Morgen,

werde diese Woche noch einen Link auf mein Git Repo posten.

Der Adapter ist aber nur die halbe Miete...vis Views bzw. kleine Javascript Snippets (z.B. um bei Regen den Mäher abzurufen) sind auch noch notwendig, aber da habt Ihr ja schon tolle Vorarbeit geleistet.

Danke

Stefan

Benutzeravatar
Andreas
Beiträge: 28
Registriert: Mo 10. Apr 2017, 20:29
Wohnort: Harrislee
Mäher: Gardena R70Li
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2015
Robonect-Modul: Robonect Hx (Rev.3)
Robonect Firmware: 1.0 Beta2 (Bootloader v0.4)
Kontaktdaten:

Re: http request ioBroker javascript vs. node-red

Beitrag von Andreas » Fr 18. Mai 2018, 11:54

Ziemlich genial integriert bzw. mit dem Rolltor umgesetzt. Ich persönlich fände die Steuerung mit dem manuellen Umsetzen auf Auto und der Messung des leeren Akkus für das Rolltor zu komplex, aber es scheint ja zu funktionieren, oder?

Hast du als Verbesserungsidee vielleicht mal überlegt RFID einzusetzen? Evtl. könnte man vorne an dein Shawn ein passives RFID-Tag anbringen, welches dann - je nach deinen Gegebenheiten vor dem Tor ausgelesen werden kann und dann entsprechend immer reagiert werden könnte? Er fährt ja recht langsam in sein zu Hause ein, da könnte man viel machen.
RFID gibt es ja in verschiedenen klassen, aber selbst im 868MHz-Bereich kann man auch schon auf größere Distanzen Tags auslesen, falls man nicht gerade einen Reader im Boden vergraben möchte. Nur so als Idee :). Finde das sonst ne echt coole Idee mit dem Rolltor, bei sowas juckt es einem dann immer in den Fingern :-P.
Vielen Dank und viele Grüße,
Dipl.-Inform. (FH) Andreas Link

Robonect Integration in OpenHAB2 via MQTT

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste