Wie füge ich Sensoren hinzu die nicht von einem Adapter/ioBroker unterstützt werden?

  • [Part 1]


    Da ich schon des öfteren gefragt wurde wie man denn Werte in den Broker bekommt die jetzt nicht direkt von einem Basic oder Smart-Sensor kommen, hier also mal ein "kleines" HowTo...


    Damit es jeder nachbauen kann, wollen wir die CPU-Temperatur des PI in den ioBroker integrieren (ja, dafür gibt es einen Adapter, soll aber auch nur die Vorgehensweise erläutern).


    Synopsis:

    [PUTTY] - folgende Zeichen so in den Terminalclient (z.B. putty ;) ) eingeben

    [OUT] - Ausgabe auf Putty, bpsw. von einem Befehl


    Der Datenlieferant:

    Zuerst müssen wir erst mal die Daten bekommen, die wir in den Broker integrieren möchten. Geeignet ist einfach alles was einen Wert liefert. Das kann bspw. ein DHT22 am Pi sein, ein oder mehrere 18B20 an einem Arduino, oder ...


    Wir stellen eine Terminal-Sitzung mit dem Pi her und loggen uns als User Pi ein.

    Die Core-Temperatur bekommen wir beim Pi recht einfach: [PUTTY] vcgencmd measure_temp

    Ausgabebeispiel: [OUT] temp=49.4'C


    Sehr schön, aber leider nicht so ganz zu gebrauchen, denn wir benötigen nur die Temperatur. Ich möchte an dieser Stelle kein Linux-Wissen vermitteln, deswegen nur rudimentär wie man an die Temperatur herankommt:

    [PUTTY] vcgencmd measure_temp|cut -d'=' -f2

    [OUT] 49.4'C

    Schon besser...


    [PUTTY] vcgencmd measure_temp|cut -d'=' -f2|tr -d \'C

    [OUT] 49.4

    Bingo :D


    Um etwas Ordnung zu halten, lege ich bash-Scripte bei mir im Ordner "script" des home-Verzeichnisses an. Wer das ebenfalls möchte, ein Verzeichnis anlegen (sonst überspringen): [PUTTY] cd ~ && mkdir script

    Ein neues Bash-Script erstellen (wer vom Beispiel abweicht muss natürlich jetzt sein Verzeichnis anpassen!). Ich nenne es jetzt mal sysinfo2iobroker.sh:

    [PUTTY] nano ~/script/sysinfo2iobroker.sh


    Dort fügt ihr nun ein:

    Erklärung:

    (ioBroker-Datenpunkt)

    Genau so und dort wird der Datenpunkt abgelegt, also hier unter javascript.0 -> Systeminfos -> RaspberryPi -> Wohnzimmer unter dem Namen "Temperatur_Core" (die Bezeichnung ab dem letzten Punkt gibt immer den Namen des Datenpunktes an)


    (ioBroker-IP:Port)

    selbsterklärend


    (Werte abfragen)

    Die Zeile kennen wir im Grunde schon, nur wird die Ausgabe jetzt zur Weiterverarbeitung in einer Variablen gespeichert


    Wenn wir fertig sind, speichern mit STRG + O, nano mit STRG + X beenden.

    Nun müssen wir das Shell-Script noch ausführbar machen: [PUTTY] chmod 755 ~/script/sysinfo2iobroker.sh


    Vorerst sind wir hier fertig und wechseln zum ioBroker.

    Falls noch nicht installiert, wir benötigen an Adaptern die "Script Engine", den "ioBroker simple web Adapter" und zu guter Letzt den "simpleAPI Adapter".

    Wir begeben uns danach in die Einstellungen des Web-Server-Adapters (web.0) und setzen ein Häkchen bei Eingebautes 'Simple-API'. Mehr ist nicht zu konfigurieren, also "Speichern" klicken.


    Wir gehen unter "Skripte" und erzeugen an gewünschter Stelle ein neues Skript (ruhig auch mit Gruppen arbeiten) und geben diesem einen aussagekräftigen Namen.

    Nun kopieren wir folgenden Quelltext in das Javascript:




    Setzt man "logging" auf true, wird im Log auch angezeigt was in der vorletzten Zeile steht. Die Meldung könnt ihr natürlich entsprechend anpassen. "name" und "desc" könnt ihr nach Lust und Laune ändern, var idDPTemp = 'javascript...'; muss aber so heißen wie ihr es im Shell-Script zuvor benannt habt!

    Fertig --> "Speichern" klicken.


    Das Script mittels Klick auf den roten Play-Button starten (sollte zum grünen Pause-Zeichen wechseln).

    Und nun? Nix passiert, ich sehe keine Datenpunkte...;(

    Völlig korrekt so, denn euer "Datenlieferant" liefert ja auch (noch) nichts, also mal in die Terminal-Sitzung vom Pi wechseln,

    [PUTTY] ~/script/sysinfo2iobroker.sh

    [OUT] {"id":"javascript.0.Systeminfos.RaspberryPi.Wohnzimmer.Temperatur_Core","value":49.4,"val":49.4}

    ...und im ioBroker

    schimmer-media.de/index.php?attachment/2182/

    ...so wollten wir das 8)


    Damit die Daten nun zyklisch gesendet werden, richten wir auf dem Datenlieferant noch einen cronjob (im Beispiel sollen alle 5 Minuten die Daten geschickt werden) ein.

    [PUTTY] crontab -e

    und fügen unten an: */5 * * * * /home/pi/script/sysinfo2iobroker.sh >/dev/null 2>&1


    Wenn wir fertig sind, speichern mit STRG + O, crontab/nano mit STRG + X beenden.


    Fertig. Nun können wir uns auch die Temperatur bspw. in VIS anzeigen lassen, per Blockly weiterverarbeiten...


    schimmer-media.de/index.php?attachment/2183/

    Pauschal kann auch ein Windows-Rechner oder Mac als Datenlieferant dienen, genauso wie ein Arduino etc. Es muss

    nur der entsprechende (Sensor)-Wert ermittelt werden und per HTTP an den Broker geschickt werden können.




    Als nächstes werden wir noch die freie Speicherkapazität der SD-Karte in den Broker übernehmen...

    ...und zum Ende gibt es eine kleine Aufgabe^^

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • [Part 2] basierend auf "Part 1"


    Wie im Teil 1 angekündigt wollen wir nun als weiteres Beispiel die freie Speicherkapazität der SD-Karte des Pi's in den Broker integrieren. Verzeichnis und Namen sind wie in "Part 1" und müssen angepasst werden falls ihr diese geändert habt.



    Dazu müssen wir diese erst einmal ermitteln. Linux ist sehr freigiebig was Daten etc. angeht. Wir nutzen nun "df".

    Wir stellen eine Terminal-Sitzung mit dem Pi her und loggen uns als User Pi ein.

    [PUTTY] df

    [OUT] eine, wohl für viele, verwirrende Liste


    Vielleicht erinnert sich aber der ein oder andere an

    Zitat

    "Ich möchte an dieser Stelle kein Linux-Wissen vermitteln, deswegen nur rudimentär wie man..."

    So ganz ohne Erklärung dann aber doch nicht :)


    Was wir im Moment wollen befindet sich unter "/dev/root"

    [PUTTY] df|grep "/dev/root"

    [OUT] /dev/root 15205044 5918836 8605512 41% /

    Ich brauche wohl nicht zu erwähnen, dass die Zahlenwerte bei euch natürlich anders lauten?


    Ok, schnippeln wir uns die "freien kBytes" noch heraus:

    [PUTTY] df|grep "/dev/root"|awk '{print $4}'

    [OUT] 8605512

    ...und wieder Bingo 8)


    Wir erweiteren also unser Script (jetzt wird vielleicht auch klar warum ich ihm keinen Namen wie "Temperatur" gab, sondern "sysinfo..."^^):

    [PUTTY] nano ~/script/sysinfo2iobroker.sh


    Leider unterstützt die Board-Software kein Code-Tagging, deswegen hier der kpl. Quelltext und als Bild die vorgenommenen Änderungen bzw. Ergänzungen.



    schimmer-media.de/index.php?attachment/2195/


    Zwischen den beiden "Senden"-Befehlen wird eine Verzögerung von 3 Sekunden vorgenommen. Normalerweise schafft es der Pi auch ohne, aber zur Stabilität ist es mit Pause einfach besser. Mehr brauchen wir an dieser Stelle nicht zu tun. nano speichern und beenden (die Sache mit STRG+O und X...)

    Beim nächsten Intervall des Cronjobs wird nun auch die freie SD-Kapazität an den Broker geschickt.


    Man mag es ahnen, der Broker kann mit dem neuen Datenpaket nur teilweise etwas anfangen.

    Also ab in den Broker --> Skripte und zu unserem Javascript. Zuerst halten wir es durch einen Klick auf das grüne Pause-Zeichen an (wechselt zum roten Play-Button).

    Nun ersetzen (oder ergänzen) wir den Javascript-Code. Da ist nichts neues hinzugekommen, nur altbekanntes dupliziert worden:



    schimmer-media.de/index.php?attachment/2196/

    Speichern und das Javascript wieder starten. Wenn das Cron-Intervall nicht geändert wurde, sollte es nun bei den nächsten vollen 5 Minuten (Uhrzeit xx:00,xx:05,xx:10,...xx:55) so aussehen:

    schimmer-media.de/index.php?attachment/2197/

    Yeah, ~8GB frei, stimmt sogar... :D

    Falls sich jemand wundert warum bei ihm z.B. kein "Wohnzimmer" steht, dass muss man bei den Objekten selbst auswählen, falls man überhaupt Räume definiert hat.


    Wie üblich: Da es nun ein Datenpunkt ist, lässt er sich auch weiterverarbeiten. Hier mal in VIS (umgerechnet in MB)

    schimmer-media.de/index.php?attachment/2198/



    Wer möchte kann natürlich jetzt mal versuchen anstelle der freien kBytes z.B. die belegte/verwendete Prozentzahl der SD-Karte in den Broker zu bekommen...


    Im nächsten Schritt [Part 3] werden wir die Abfrage der SD-Karte noch etwas verfeinern, denn alle 5 Minuten abfragen ist zum einen IMHO nicht unbedingt notwendig, zum anderen wären das völlig unnötig 105.120(!) Lesezyklen jährlich auf der SD-Karte.


    ...und die kleine Aufgabe wartet dann auch noch...

    ...und Merci für die Likes. So sehe ich wenigstens das Interesse besteht. Euch kostet es bei gefallen 2 Sekunden für einen Klick, mich etliche Stunden so ein HowTo zu verfassen ;)


    Noch geplant: Part x - wie man mittels z.B. ESP8266 Messwerte in den Broker bekommt.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • [Part 3] basierend auf "Part 1" und "Part 2"


    Wie im "Part 2" erwähnt ist es nicht gerade die beste Idee eine SD-Karte "unnötig zu belästigen".

    Wir gewinnen dadurch keine neuen Erkenntnisse (um wie viel wird die freie Kapazität wohl täglich abnehmen? Paar KiloBytes? Da genügt IMO einmal am Tag eine Abfrage...), nur die Hersteller von SD-Karten wird es sicherlich freuen.


    Eine recht simple Lösung wäre jetzt natürlich, einfach unser Shell-Script "sysinfo2iobroker.sh" in zwei einzelne Skripte zu zerlegen und zu unterschiedlichen Zeiten aufzurufen. Diesen Weg müsst ihr alleine gehen, denn hier soll es primär darum gehen auch etwas zu lernen. Es wird nicht immer alles kpl. fertig vorliegen oder euch jemand helfen können. Da schadet es durchaus nicht sich auch mal etwas mit der Materie zu befassen.


    Gegen meine Linux-Aussage von Teil 1+2 müssen wir jetzt doch etwas in Linux eintauchen. Den Broker oder Javascript brauchen wir nicht anrühren, da dass Javascript nur "angetriggert" wird wenn auch Daten an dieses geschickt werden. Genau das wollen wir aber für den SD-Karten-Teil ändern.


    Wie bringe ich also nun ein Shell-Skript dazu auf meine "Wünsche" zu reagieren? Im Prinzip so simpel wie möglich: ich sag es ihm einfach... :)

    Etwas anderes macht ihr bei Alexa auch nicht: Alexa - "schalte Lampe an"

    Dabei wäre Alexa unser Skript, "schalte Lampe an" der Befehl


    Wir überlegen uns also zwei Befehle: CORETEMP und FREESD

    Damit würde (bzw. soll)

    sysinfo2iobroker CORETEMP

    die CPU-Temperatur des PI an den Broker senden, dementsprechend

    sysinfo2iobroker FREESD

    die freie Kapazität der SD-Karte.


    Wir müssen nun im Skript irgendwie unterscheiden welcher Befehl an das Skript geschickt wurde.

    Die lassen wir uns mal ausgeben. Auf Pi verbinden, Skript mittels nano editieren, speichern und beenden bin ich in Teil 1+2 genügend eingegangen und sollte uns bereits gelingen. Wir fügen unserem Script mal testweise unten an:


    [Quellcode] clear && echo Aufruf erfolgte mit: $1

    und starten es [PUTTY] ~/script/sysinfo2iobroker.sh CORETEMP

    [OUT]Aufruf erfolgte mit: CORETEMP


    Funktioniert und wir lernen in $1 befindet sich offensichtlich der übergebene Parameter. Allerdings wird noch nicht darauf reagiert und eine Eingabe wie "Käsekuchen" bewirkt auch nichts besonderes. Das ändern wir mit dem Befehl "case/esac".



    Frei übersetzt heißt das "im Fall von xyz mache...". Ein Sonderfall stellt der Asterisk dar. Sollte "$1" keinem Wert der Liste entsprechen, ist dies der übliche universelle Platzhalter. Er trifft einfach auf alles zu. Rufen wir unser Skript nun mal tatsächlich mit "Käsekuchen" auf, wird als Ausgabe erscheinen: Käsekuchen ist mir leider unbekannt... und das Script mit einem Fehlerwert 1 beendet. "-e \n" bewirkt nur eine neue Zeile bei der Ausgabe. Rückgabe- bzw. Fehlerwerte werden hier zwar von uns nicht weiter behandelt, gehören aber zum guten "Ton" wenn man Skripte schreibt. "0" bedeutet 'Alles, Ok kein Fehler aufgetreten', alles

    andere halt einen Fehler. Diesen kann man natürlich weiterverarbeiten bzw. auswerten. In unserem Falle wüsste man dann, dass das Script mit einem falschen Parameter gestartet wurde.


    Wir ändern noch den/die Cronjobs. Zum einen müssen wir nun ja einen Parameter übergeben, zum anderen noch unsere Abfrage für die freie SD-Karten-Kapazität starten. Ich habe mich täglich für 06:01 Uhr entschieden.

    */5 * * * * /home/pi/script/sysinfo2iobroker.sh CORETEMP >/dev/null 2>&1

    1 6 * * * /home/pi/script/sysinfo2iobroker.sh FREESD >/dev/null 2>&1


    Als kleine Fingerübung:


    schimmer-media.de/index.php?attachment/2222/

    Bekommt ihr die Zeitstempel (als Unix-Timestamp) in den Broker? So sieht man ob die Datenübertragung z.B. seit etlichen Stunden hängt. Der Unix-Timestamp (vergangene Sekunden seit dem 01.01.1970 0:00 Uhr) ist zwar nicht gerade human readable, vereinfacht aber das rechnen mit einem Datum ungemein. Bei VIS wird so mit einem Klick wieder ein lesbares Datum daraus.


    schimmer-media.de/index.php?attachment/2223/


    Noch geplant:

    Part x - wie man mittels z.B. ESP8266 Messwerte in den Broker bekommt.

    Part y - Daten eines am Pi angeschlossenen DHT22 im Broker sichtbar machen.

    Part z - Daten eines am Rechner angeschlossenen 18B20 im Broker sichtbar machen.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • [Part 4] basierend auf "Part 1-3"

    ...oder wie man Daten eines am Pi angeschlossenen DHT22 im Broker sichtbar macht (gilt analog auch für einen DHT11, AM2302 & baugleiche, der DHT11 ist nur ungenauer)


    Die erste Frage wird meist lauten: DHT22? Kann man das essen? Wofür ist das denn gut...?

    Sie lässt sich aber recht einfach beantworten: es ist ein Sensor, um die Luftfeuchtigkeit zu messen. Da man die Luftfeuchte aber nicht ohne eine Temperatur feststellen kann, misst der DHT22/11/AM2302 auch gleichzeitig die Temperatur.

    Er ist sehr günstig (~3,- € aus Fernost) und einfach anzuschließen. Er benötigt lediglich GND, +3.3 Volt und gibt seine Daten an einem Digital-Pin aus. Der vierte Pin am Sensor ist nicht angeschlossen und somit ohne Funktion. An externer Beschaltung ist lediglich ein 10k Ohm PullUp-Widerstand nötig, der zwischen die 3.3V Spannungsversorgung und dem Digital-Pin geschaltet wird.


    Hier der Anschluss und die Installation am Pi, den ihr nun zuerst durchführen müsst (ev. dran denken, Scripte liegen unter ~/script wenn ihr dem Beispiel aus Part 1-3 gefolgt seid, dann sollte dieses Script auch dort abgelegt werden):

    https://tutorials-raspberrypi.…ratur-messen-dht11-dht22/


    Hier geht es nun weiter, wenn ~/script/AdafruitDHT.py 22 4 eine Ausgabe wie Temp=22.40°C Humidity=41.1% ergibt.

    Wir ersetzen nun die AdafruitDHT.py durch die minimal modifizierte Version (somit hat jeder den gleichen Stand/Ausgabe, Zip bitte vorher entpacken): schimmer-media.de/index.php?attachment/2263/


    Eigentlich könnte ich doch jetzt hier aufhören? Das kommt uns doch alles bekannt vor?

    ...da ihr weiter lest, traut ihr es euch also entweder nicht zu, oder seid doch unsicher wie es weitergeht.


    Wir, oder zumindest ich, sind Tipp faul, also legen wir den Aufruf der Python-Datei in einer Variablen (ggf. Pfad anpassen nicht vergessen wenn ihr es wo anders hingelegt habt) ab:

    [PUTTY]DHT=$(/home/pi/script/AdafruitDHT.py 22 4)

    [OUT]Nix???

    Doch, es ist aber in einer Variable gespeichert. Diese kann man mittels $ auch verarbeiten:

    [PUTTY]echo $DHT

    [OUT]Temp=22.40°C Humidity=41.1%


    Also wieder altbekanntes Problem. Wir wollen nur die Zahlenwerte von Temperatur und Luftfeuchtigkeit im Broker. Wir schnippeln doch so gerne 8) :


    (Hier könnte der geneigte User mal pausieren und sich selbst daran versuchen ^^ )


    [PUTTY]echo ${DHT} | cut -d"=" -f2

    [OUT]22.40°C Humidity

    Schon besser, aber noch zu viel des Guten...

    [PUTTY]echo ${DHT} | cut -d"=" -f2 | cut -c 1-5

    [OUT]22.40

    8) , aber nicht Bingo. Warum aber? Genau die Temperatur wollten wir doch...

    Nun ja, lassen wir es so, müssten wir wohl bald einen Patch dafür herausbringen. Man kann nicht immer an alles denken, deswegen wird an der Stelle kaum jemand der Fehler auffallen. Der Fehlerteufel steckt wie so oft üblich im Detail.

    Mit dem letzten "cut"-Befehl werden die Zeichen 1-5 abgeschnitten. Als Ergebnis erhalten wir wie gewünscht 22.40 Soweit, sogut, aber was passiert bei einstelligen Temperaturen? Dann wird plötzlich aus dem vorherigen String "9.40°C Humidity" als Ergebnis 9.40° (eben die Zeichen von 1-5). Tja, wir sehen dass, Rechner mögen zwar schneller wie wir sein, sie sind aber auch wesentlich blöder...


    Also glänzen wir mit Weisheit:

    [PUTTY]echo ${DHT} | cut -d"=" -f2 | cut -c 1-5 | sed -e 's/°//g'

    [OUT]22.40

    Nix passiert? War auch nicht anders zu erwarten und so gewollt. Mittels des letzten Befehls wird einfach das °-Zeichen gelöscht. In 22.40 war es nicht enthalten, also wird auch nichts gelöscht. Für unseren einstelligen "Fehlerfall" von eben sieht das aber anders aus. Hier würde nun 9.40 zurückgegeben.

    Aber jetzt: Bingo 8)


    (Aber die Luftfeuchte macht ihr jetzt selber...?)

    ...Ok, dann halt wieder ich, wäre jetzt aber einfach zu lösen...


    [PUTTY]echo ${DHT} | cut -d"=" -f3

    [OUT]41.1%

    Ups, fast perfekt...

    [PUTTY]echo ${DHT} | cut -d"=" -f3 | sed -e 's/%//g'

    [OUT]41.1


    Superbingo :D


    Wenn wir also alles in Variablen packen haben wir was wir wollen. Wir fassen zusammen:

    DHT=$(/home/pi/script/AdafruitDHT.py 22 4)



    TEMPERATUR=$(echo ${DHT} | cut -d"=" -f2 | cut -c 1-5 | sed -e 's/°//g')



    HUMI=$(echo ${DHT} | cut -d"=" -f3 | sed -e 's/%//g')


    Dann wird es Zeit unser kleines Shell-Script zu schreiben. Ich nenne es mal raumklima.sh und kommt natürlich wieder unter die altbekannten scripte:

    [PUTTY]nano ~/script/raumklima.sh


    ...und jetzt ab in den Broker und das Javascript erstellen.

    In den Broker ja, aber wir erstellen diesmal kein Javascript mehr. Wenn wir die Datenpunkte per Hand anlegen brauchen wir nicht mehr zwangsläufig ein Javascript, zumindest wenn die Werte nur als Datenpunkt abgelegt werden und wir keine Meldungen im Log wünschen.

    Im Broker also Objekte --> javascript.0 anklicken, dann über das Menü "+" (Ein Tochterobjekt...) anlegen.

    Da wir zuerst lt. unserem obigen Datenpunkt einen "Ordner" 'Raumklima' wollen, müssen wir den Punkt auch 'Raumklima' nennen.

    "Hinzufügen" klicken. Im nächsten Fenster können wir nun unter "Allgemein" einfach alles per Mülltonne löschen oder klicken einfach unten auf Abbrechen.

    Äh, Moment mal. Ich wollte doch einen Ordner anlegen, habe aber jetzt einen Datenpunkt?! Was ist denn da schief gelaufen?

    Nichts, dass muss so sein. Erst wenn man ein weiteres "Tochterobjekt" unter 'Raumklima' anlegt wird er zum Ordner!

    Also "Raumklima" anklicken, dann über das Menü "+" (Ein Tochterobjekt...) anlegen. Dieses muss jetzt "Wohnzimmer" heißen, hatten wir ja so festgelegt. Rest wie beim letzten Mal und wir bemerken, dass aus "Raumklima" nun tatsächlich ein Ordner wurde.

    Wir führen das Ganze noch ein letztes Mal aus, wir brauchen noch den "echten" Datenpunkt.

    Also "Wohnzimmer" anklicken, dann über das Menü "+" (Ein Tochterobjekt...) anlegen und diesen nun "Temperatur" nennen. Da dies aber diesmal tatsächlich ein Datenpunkt wird, müssen wir auch den richtigen Datenpunkttyp wählen. Temperatur ist wohl eine Zahl...

    Im nächsten Fenster können wir jetzt eine Beschreibung eingeben, müssen aber minimaler/maximaler Wert löschen (per Mülltonne) und sollten eine korrekte Maßeinheit eingeben. Ich nehme mal °C. "Speichern" klicken.

    Wir klicken wieder auf "Wohnzimmer" und wiederholen den letzten Schritt, diesmal geben wir aber "Luftfeuchtigkeit" und die passenden Werte an (also bspw. Maßeinheit %H). Wir wiederholen den Schritt nochmals, diesmal mit "Zeitstempel".

    Zum Schluss wählen wir noch die geeigneten "Rollen" aus und ggf. "Räume". Dann sieht das Ganze z.B. so aus:

    schimmer-media.de/index.php?attachment/2264/



    Dann können wir mal unser Shell-Script starten und die Werte im Broker begutachten.

    [PUTTY]~/script/raumklima.sh

    Ohoh, was ist denn nun schief gelaufen? Eigentlich hätte ich vorhin den Aufschrei bis hierher hören müssen...!?

    Was haben wir, nee ihr, ich weiß es ja, denn bloß vergessen? Überlegt mal...

    Wer nicht drauf kommt darf auch "spoilern"...



    Aber jetzt:

    schimmer-media.de/index.php?attachment/2265/


    ...und mal wieder als VIS-Beispiel (hier ohne Ausgabe des Zeitstempels):

    schimmer-media.de/index.php?attachment/2267/


    Nun können wir natürlich die Datenpunkte auch per Blockly abfragen und entsprechend darauf reagieren 8)

    Alles ohne Gateways oder Zusatzsensoren, einfach mit zwei elektronischen Bauteilen für ~3,- € realisiert.

    Da ein Pi aber in jedem Zimmer zu teuer, und auch wenn nur dafür genutzt, total oversized wäre, beschäftigen wir uns in einem späteren Teil damit wie wir es mittels ESP8266 günstig lösen können. Dabei spielt es natürlich keine Rolle was wir messen, dies muss nicht immer nur die Temperatur sein, sondern können selbstverständlich auch Schaltzustände (z.B. von Fenster- oder Türkontakten), Flüssigkeitsstände usw. sein.


    Wem die obige "Klickorgie" nicht gefällt, kann sich auch wieder ein Javascript bauen, welches die benötigten Datenpunkte anlegt.


    ...und natürlich ist mir bewusst, dass ich dem geneigten Leser die Auflösung zur Aufgabe aus #3 hiermit verraten habe ^^


    *EDIT* Natürlich müsste man raumklima.sh nun zyklisch per Cronjob aufrufen, aber das kriegt ihr schon alleine hin... :saint:


    Noch geplant:

    Part x - wie man mittels z.B. ESP8266 Messwerte in den Broker bekommt.

    Part y - Daten eines am Rechner angeschlossenen 18B20 im Broker sichtbar machen.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

    Einmal editiert, zuletzt von SBorg () aus folgendem Grund: Cronjobs vergessen...

  • Sehr schöne Arbeit!

    Danke !

    Prüf mal ob du schon einen Widerstand beim AM2302 mit eingebaut hast (vcc-Data)

    Bei denen die ich habe sind schon 4,7 kohm mit drin .

    Einfach mit dem Multimeter nach messen .


    Hast dir sehr viel Mühe damit gegeben ! Danke


    Gruß Ralf


    Bei bedarf lösch ich das hier auch wieder ! Damit das sauber bleibt !

  • Was du da misst ist kein interner PullUp, sondern der Widerstand der Schaltung. Lt. Datenblatt ist auch beim AM2302 ein PullUp vorzusehen. Man kann sie eigentlich auch weglassen, nur kann dies in bestimmten Situationen Fehler verursachen (undefinierter Zustand). Durch den höher ohmigen Widerstand wird der Eingang immer fest auf den High-Pegel (=VCC) geklemmt. Kommt ein Low-Pegel gegen GND, ist dieser damit 0V. So kann man definitiv zwischen High (>1.8V) und Low (0V) unterscheiden. Ohne PullUp "hängt" der Ein-/Ausgang auf keinem fest definiertem Pegel und kann gerade im Bereich der Schaltschwelle zwischen High und Low durchaus ein High-Signal liefern, obwohl es eigentlich Low sein sollte.


    Vereinfacht ausgedrückt...:S

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Danke dir für deine Schilderung ! Ich hatte es irgendwann mal in Arduino Forum gelesen . Ob es jetzt 100% wahr ist kann ich nicht sagen oder begründen .

    Hatte bei meinen AM2302 mal nachgemessen-4,7 kOhm bei meinen Ds18b20 (?) hatte ich das auch geprüft und nichts gemessen .


    Gruß Ral

  • Arduino ist auch was anderes als der Pi. Beim Arduino kannst du per Befehl interne PullUps aktivieren. Auch wenn der DS nur drei Beinchen hat, ist das trotzdem ein IC.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Hallo,

    ich bin ja neu hier und gerade dabei mich etwas durchzulesen!

    Gerade hab ich diesen Thread gespannt gelesen und nun stellt sich mir die Frage ob es auch möglich ist die Temperaturdaten von mehreren DS18B20 die über den 1Wire am Raspberry betrieben werden anzuzeigen.

    Ich messe damit momentan meine Temperaturen am Teich und draussen usw..


    Schöne Grüße

    Jürgen

  • Funktioniert genauso (nutze ich beim DIY-Projekt "Grillthermometer"). Dort ist es ein MAX (bis 1300°C) und bis zu acht DS18B20. Du musst halt nur alles duplizieren (Datenpunkte, Variablen etc.)

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Funktioniert genauso (nutze ich beim DIY-Projekt "Grillthermometer"). Dort ist es ein MAX (bis 1300°C) und bis zu acht DS18B20. Du musst halt nur alles duplizieren (Datenpunkte, Variablen etc.)

    Danke!

    Wäre es möglich mir das genauer zu erklären? Gerne auch in einem eigenen Thread.

    Ich weiß momentan nicht wie ich das angehen soll, wie gesagt ich bin Neuling!

  • Kein Problem bzgl. "Neuling", schließlich hat jeder mal angefangen. Mein Neuling ist zwar schon bisserl her, aber auch ich war mal einer ^^

    Ist der Pi an dem die DS18B20 per 1Wire hängen auch derjenige auf dem der Broker läuft (oder laufen soll)?

    Dann kannst du im ioBroker auch einfach den "1Wire OWFS"-Adapter installieren, schon hast du deine sämtlichen Sensoren im Broker drin :)

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Nein, Momentan laufen die Sensoren an einem separaten PI mit einer diy Steuerungssoftware aus einem Koiforum.

    Wenn es möglich wäre die weiter laufen zu lassen und ich die Sensoren trotzdem im ioBroker angezeigt komme wäre super, aber nicht zwingend notwendig. Allerdings bräuchte ich da auch wieder Hilfestellung, ob so oder so.

  • Wäre so halt einfacher gewesen, geht aber auch beides parallel und auf getrennten Pis/Rechnern.

    Kriegen wir hin :)

    Da das aber doch "etwas" umfangreicher wird, mach bitte dafür einen eigenen Thread auf. Kannst auch einfach den Text von #9 kopieren, dass genügt mir schon. Könntest mir auch dort noch eine Frage beantworten: wie sind denn deine Linux-Kenntnisse (dann muss ich ggf. ausführlicher werden)?

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Hallo ich habe grade angefangen mich mit dem ioBroker auseinander zu setzten. Ich habe mit erst ein sonoff geflasht, verbaut und Integriert.

    Jetzt beim einbinden eines DHT22 bin ich aber auf ein Problem gestoßen. Ich habe es noch der Anleitung gemacht, bleibe aber immer beim Bashscript bzw. bei der Datenübergabe an den ioBroker hängen.


    1. bei mir ist kein "javascript.0" Ordner bei den Objekten. sondern "system.adapter.javascript.0".

    2. Egal wie ich es Versuche ich bekomme kein Daten an an die Javascript.0 übergeben.

    screenshoot.png


    Ich nutze einen RaspberryPi 2 mit dem ioBroker Image

  • Hi,

    "javascript.0" wird eigentlich automatisch angelegt, Hast du denn den Adapter Javascript "Script Engine" installiert?

    "system.adapter.javascript.0" ist nur vom ioBroker selbst und hat so nichts direkt mit dem Javascript-Adapter zu tun.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Ach so,

    ...

    "system.adapter.javascript.0" ist nur vom ioBroker selbst und hat so nichts direkt mit dem Javascript-Adapter zu tun.

    das erklärt natürlich, warum ich keine Daten übergeben bekomme.

    Dieses Image habe ich installiert, demnach sollte auch auch Installiert sein.

    Unter "Adapter" ist Javascript (Script Engine) auch installiert, aber der "Ordner" javascript.0 fehlt mir bei den Objekten.

    Dann werde ich erstmal gucken, ob ich den Ordner nach dem Löschen des Adapters und erneutem Installieren habe.

    Danke.

  • Jepp, ist mit 3.6.4 auch die aktuelle Version.

    Du kannst aber auch einfach selbst den "Ordner" javascript.0 per Hand anlegen.

    Die letzten Worte vor dem Weltuntergang: "...das ist technisch völlig unmöglich..."


    aktuelle Projekte: <<< Magic Mirror +++ RMS +++ Wetterstation +++ Somfy Fernbedienung >>>

  • Hi SBorg,


    Jetzt habe ich die Alexa 2.0 drauf und auch schon etwas mit rumgespielt, d.h. wenn ich meine Schlafzimmertür auf mache, dann wünscht mir Alexa einen guten Morgen und sagt mir die Temperatur und Feuchtigkeit an. Diese sende ich mit dem esp8266 und mqtt an den iobroker, soweit so gut. Nun zur Frage, kann ich auch Alexa nochmal fragen, "wie ist die Tempertur? " und sie sagt mir dann nochmal die Werte die der esp8266 übermittelt hat. Also einfach Alexa schalte nix an, sondern Alexa sage mir Sensordaten und dann sagt sie meine Sensordaten....