Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. gender

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    G
    • Profile
    • Following 0
    • Followers 0
    • Topics 10
    • Posts 102
    • Best 3
    • Groups 2

    gender

    @gender

    Pro

    6
    Reputation
    58
    Profile views
    102
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    gender Follow
    Pro Starter

    Best posts made by gender

    • SMS und/oder Anruf mit SIM800-Modul und Node-Red

      Hallo Iobroker-Gemeinde,

      hier wollte ich einmal meine Umsetzung vorstellen, wie man mit einer Sim-Karte, entsprechendem Modul, Raspberry-PI und Node-Red und schließlich in Verbindung mit IoBroker Anrufe tätigen oder auch SMS verschicken/versenden kann.

      Hintergrund: Ich wollte gerne eine Benachrichtigung auf mein Handy bei bestimmten Gefahr-Ereignissen haben (wie z.B. Wasser im Keller oder gar Feuer-Alarm). Dabei wollte ich allerdings auf keinen Fall auf irgendwelche Internetdienste zurückgreifen, bei denen man sich registrieren muss, um SMS zu verschicken etc.

      Was man braucht:

      • Eine Sim-Karte mit Guthaben oder Vertrag (ich benutze eine Vertragskarte; 2.95 Euro im Monat mit 100 Frei-Einheiten, das sollte für die Gefahrenmeldungen HOFFENTLICH reichen 😉 )
      • Raspberry-PI und ein Sim-Karten-Modul bzw. seriellen Adapter (diesen "Raspberry PI SIM800 GSM GPRS Add-on V2.0 Entwicklungsplatine" benutze ich, bei Amazon für 25 Euro). Es geht auch ein UMTS-Stick - die Installation kann aber wesentlich aufwendiger sein)
      • Node-Red und soweit ich mich erinner muss das Paket "node-red-node-serialport" nachinstalliert werden.

      Folgendermaßen habe ich das ganze aufgebaut:
      Über Node-Red greife ich per MQTT auf den Iobroker zu. Sobald ein Sensor oder was auch immer passiert, geht per MQTT eine Nachricht an Node-Red bzw. den Raspberry PI bzw. an die Sim-Karte.
      Andersherum: Sobald eine SMS auf der Sim-Karte eingeht, wird per MQTT dies an IoBroker gesendet. So gesehen ist es quasi auch möglich, per SMS irgendwelche Ereignisse im IoBroker zu initiieren.

      Installation des seriellen Adapters:
      Letztlich muss das Modul nur auf die PINs des PIs aufgesteckt werden. Das ist auch deswegen praktisch, da dann die Pins des PIs weiterhin genutzt werden können.
      Allerdings muss beim PI noch die serielle Schnittstelle aktiviert werden (da die seit Rasbian Jessie nicht mehr standardmäßig unterstützt wird). Hierzu muss in der Datei /boot/config.txt die Zeile enable_uart=1 hinzugefügt werden. Letztlich fehlt dann noch der Befehl sudo systemctl mask serial-getty@ttyS0.service , damit ein Zugriff auf die Schnittstelle erfolgen kann. Danach muss der PI neu gebootet werden.
      Wie bereits erwähnt, hatte ich das ganze auch schon mit einem UMTS-Stick zum laufen gebracht. Die Installation des USB-Sticks unter Raspbian kann aber sehr mühselig sein, daher empfehle ich diesen Weg eher nicht. Mit dem oben erwähnten Adapter war es fast eher Plug and Play.
      Node-Red kann einfach als Package in der Konsole auf dem PI installiert werden.

      Flows in Node-Red:
      Grundsätzlich lässt sich die Sim-Karte über die AT-Commands steuern. Wer mal danach googled, findet dazu einiges im Netz. Habt ihr erstmal in Node-Red eine Verbindung zum Adapter bzw. zur Sim-Karte erfolgreich hergestellt, steht einem Erfolgreichen Benutzen der Sim-Karte eigentlich nichts mehr im Weg.

      Ich will euch meine Flows aber natürlich nicht vorenthalten:
      Die meisten Flows enthalten auch einige Test-Injektionen, die für den eigentlich Gebrauch natürlich nicht nötig sind, aber zum Testen der Funktionalität sehr praktisch. Ich lasse mir einmal die Woche automatisiert eine Test-SMS schicken, um sicherzugehen, dass alles noch läuft.

      Flow zum Senden einer SMS:
      sendSMS.JPG

      [{"id":"b85bee9c.534a6","type":"tab","label":"SendSMS","disabled":false,"info":""},{"id":"3ad62e4c.cb16d2","type":"ui_form","z":"b85bee9c.534a6","name":"Send Through Form","label":"","group":"9fdcdcfb.94db58","order":0,"width":"0","height":"0","options":[{"label":"Number","value":"number","type":"text","required":true},{"label":"Message","value":"message","type":"text","required":true}],"formValue":{"number":"","message":""},"payload":"","submit":"Senden","cancel":"Abbrechen","topic":"","x":290,"y":220,"wires":[["9a7dc491.bfa088","62c430dd.1bc028","579bdfcc.4d9f"]]},{"id":"9a7dc491.bfa088","type":"function","z":"b85bee9c.534a6","name":"Send SMS to number","func":"var num = msg.payload.number;\nvar at_cmd = \"AT+CMGS=\\\"\"+num+\"\\\"\"; \n\nmsg.payload=at_cmd+\"\\r\";\n//msg.payload.msg =msg.payload.message;\n\nreturn msg;","outputs":"1","noerr":0,"x":640,"y":120,"wires":[["8695497b.1a799"]]},{"id":"8695497b.1a799","type":"serial out","z":"b85bee9c.534a6","name":"Serail-Out","serial":"44267baf.756834","x":1020,"y":140,"wires":[]},{"id":"9e020b4d.c669e","type":"function","z":"b85bee9c.534a6","name":"Send Message","func":"var sms_msg = msg.payload.message;\n\nmsg.payload=sms_msg+\"\\x1A\";\n//msg.payload.msg =msg.payload.message;\n\nreturn msg;","outputs":1,"noerr":0,"x":800,"y":320,"wires":[["8695497b.1a799"]]},{"id":"579bdfcc.4d9f","type":"delay","z":"b85bee9c.534a6","name":"Wait for > prompt","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":590,"y":320,"wires":[["9e020b4d.c669e"]]},{"id":"62c430dd.1bc028","type":"delay","z":"b85bee9c.534a6","name":"Wait 1 sec","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":570,"y":260,"wires":[["e048033c.a69588"]]},{"id":"e048033c.a69588","type":"function","z":"b85bee9c.534a6","name":"Write newline","func":"msg.payload=\"\\r\\n\";\nreturn msg;","outputs":1,"noerr":0,"x":800,"y":260,"wires":[["8695497b.1a799"]]},{"id":"fc3ce7ce.737d28","type":"inject","z":"b85bee9c.534a6","name":"Sende TestSMS","topic":"Send SMS","payload":"{\"number\":\"0049xxxxxxxx\",\"message\":\"Hello World\"}","payloadType":"json","repeat":"","crontab":"00 06 * * 1","once":false,"onceDelay":0.1,"x":330,"y":120,"wires":[["54611e54.ade22","9a7dc491.bfa088","62c430dd.1bc028","579bdfcc.4d9f"]]},{"id":"54611e54.ade22","type":"debug","z":"b85bee9c.534a6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":580,"y":60,"wires":[]},{"id":"a34ab2e5.7058e8","type":"mqtt in","z":"b85bee9c.534a6","name":"Get_MQTT_Message_and_send_SMS","topic":"SMSMessage","qos":"0","datatype":"json","broker":"6d37922.1f2b16c","x":210,"y":520,"wires":[["2f4fefb0.b1f348","9ff0cd50.2dce2"]]},{"id":"2f4fefb0.b1f348","type":"debug","z":"b85bee9c.534a6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":520,"wires":[]},{"id":"9ff0cd50.2dce2","type":"function","z":"b85bee9c.534a6","name":"CheckForNewMessageFromMQTT","func":"\nif(msg.payload.time!==\"0\"){\n    return msg;\n}","outputs":1,"noerr":0,"x":240,"y":360,"wires":[["8b729eef.6f0398","9a7dc491.bfa088","62c430dd.1bc028","579bdfcc.4d9f"]]},{"id":"8b729eef.6f0398","type":"debug","z":"b85bee9c.534a6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":420,"wires":[]},{"id":"9fdcdcfb.94db58","type":"ui_group","z":"","name":"SMS","tab":"76badc30.5d679c","order":1,"disp":true,"width":"6"},{"id":"44267baf.756834","type":"serial-port","z":"","serialport":"/dev/ttyS0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"6d37922.1f2b16c","type":"mqtt-broker","z":"","name":"MQTT_Synology","broker":"192.168.xxx.xxx","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"76badc30.5d679c","type":"ui_tab","z":"","name":"SMS","icon":"dashboard"}]
      
      

      Zum Versenden der SMS müssen immer gewisse Einstellungen gesetzt werden, sobald der Adapter einmal aus war... also z.B. beim Neustart des PIs (zumindest war das bei meiner Sim-Karte so). Außerdem ist (meine) Sim-Karte nach 10 SMS voll.... daher werden in diesem Flow ab 9 SMS alle von der Sim-Karte gelöscht, sodass wieder Platz ist.

      Flow zum Setzen der Einstellungen und Löschen der vorhanden SMS:

      settingSMS.JPG

      [{"id":"fde9a545.31e14","type":"tab","label":"SetSettings","disabled":false,"info":""},{"id":"747954b5.b09664","type":"inject","z":"fde9a545.31e14","name":"SetSettings","topic":"settings","payload":"CMGF=1;+CNMI=2,1","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":230,"y":140,"wires":[["e8acc297.4153a"]]},{"id":"e8acc297.4153a","type":"function","z":"fde9a545.31e14","name":"SetSettings","func":"var at_cmd = \"AT+\"+msg.payload;\nmsg.payload=at_cmd+\"\\r\\n\";\nreturn msg;\n\n//CMGF=1 -> Textmode SMS\n//CNMI=2,1 -> Notify-Setting for incoming SMS\n","outputs":"1","noerr":0,"x":530,"y":180,"wires":[["68c4f48c.8954ec"]]},{"id":"68c4f48c.8954ec","type":"serial out","z":"fde9a545.31e14","name":"Serail-Out","serial":"44267baf.756834","x":840,"y":240,"wires":[]},{"id":"21369272.aff766","type":"function","z":"fde9a545.31e14","name":"Delete SMS on SIM","func":"var m = msg.payload;\nvar tmp1 = m.split(\":\");\nvar tmp2 = m.split(\",\");\n\n\nif(tmp1[0]==\"+CPMS\")\n{\n    if(parseInt(tmp2[1])>9){\n      msg.payload = \"AT+CMGD=1,2\" +\"\\r\\n\";\n    return msg;  \n    }\n\n    \n}\n\n\n","outputs":"1","noerr":0,"x":530,"y":360,"wires":[["4c9107c4.36fb88","68c4f48c.8954ec"]]},{"id":"4c9107c4.36fb88","type":"debug","z":"fde9a545.31e14","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":810,"y":360,"wires":[]},{"id":"2b3d14af.326d24","type":"serial in","z":"fde9a545.31e14","name":"ListenDelete","serial":"44267baf.756834","x":210,"y":360,"wires":[["21369272.aff766"]]},{"id":"44267baf.756834","type":"serial-port","z":"","serialport":"/dev/ttyS0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]
      
      

      Als nächstes der Flow zum Empfangen von SMS. Hier sind sehr viele Test-Injektionen, da das einiges an Testerei erfordert hat. Wesentlich ist hier eigentlich nur der untere Teil:

      ReceiveSMS.JPG

      [{"id":"60ac5f9c.a88ba8","type":"tab","label":"ReceiveSMS","disabled":false,"info":""},{"id":"c9d719b1.5fcfe","type":"debug","z":"60ac5f9c.a88ba8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":730,"y":140,"wires":[]},{"id":"3c737cf8.0c5d04","type":"serial in","z":"60ac5f9c.a88ba8","name":"Listen For Unread SMS Notification","serial":"44267baf.756834","x":200,"y":180,"wires":[["72b2541a.5bbcf4"]]},{"id":"72b2541a.5bbcf4","type":"function","z":"60ac5f9c.a88ba8","name":"CheckForInComingSMS","func":"var m = msg.payload;\nvar cmd = m.split(\",\");\n\n\nif(cmd[0]==\"+CMTI: \\\"SM\\\"\")\n{\n    msg.payload = cmd[1];\n    return msg;\n}\n\n","outputs":1,"noerr":0,"x":510,"y":200,"wires":[["c9d719b1.5fcfe","a5af66af.daed4"]]},{"id":"22610384.a5379c","type":"inject","z":"60ac5f9c.a88ba8","name":"Simulate SMS Notification","topic":"test","payload":"+CMTI22: \"SM\",1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":210,"y":120,"wires":[["72b2541a.5bbcf4"]]},{"id":"a5af66af.daed4","type":"function","z":"60ac5f9c.a88ba8","name":"DeleteStorage and GetNewSMS","func":"var at_cmd = \"AT+CPMS?;+CMGR=\"+msg.payload; \nmsg.payload=at_cmd+\"\\r\\n\";\nreturn msg;\n\n// AT+CPMS? Number of SMS to check for Delete","outputs":"1","noerr":0,"x":570,"y":280,"wires":[["fb0b5cbe.de5808"]]},{"id":"fb0b5cbe.de5808","type":"serial out","z":"60ac5f9c.a88ba8","name":"Serail-Out","serial":"44267baf.756834","x":820,"y":280,"wires":[]},{"id":"d450864.15df4f8","type":"function","z":"60ac5f9c.a88ba8","name":"SendMessageToMQtt","func":"\nvar m = msg.payload;\nvar cmd = m.split(\":\");\n\n\nif(cmd[0]==\"+CMGR\")\n{\n    flow.set('store',m);\n    \n}\nelse if(flow.get('store')!==0){\n    var tmp = flow.get('store').split(\",\");\n    msg.payload = \n    {\n      \"number\": tmp[1],\n      \"date\": tmp[3],\n      \"time\": tmp[4],\n      \"message\": m\n    }\n\n    flow.set('store',0);\n    return msg;\n}","outputs":1,"noerr":0,"x":660,"y":460,"wires":[["f9a2f3a3.4703a","41eca393.60c464"]]},{"id":"f9a2f3a3.4703a","type":"debug","z":"60ac5f9c.a88ba8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":810,"y":560,"wires":[]},{"id":"b1158d20.346c","type":"inject","z":"60ac5f9c.a88ba8","name":"Simulate reading new SMS","topic":"Test","payload":"+CMGR: \"REC UNREAD\",\"+49xxxxxxxx\",,\"19/08/02,13:59:35+08\"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":500,"wires":[["d450864.15df4f8"]]},{"id":"3f92b63a.04a9b2","type":"inject","z":"60ac5f9c.a88ba8","name":"Simulate content of new SMS","topic":"Tesst2","payload":"This is the message","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":260,"y":560,"wires":[["d450864.15df4f8"]]},{"id":"cae104b4.b76e48","type":"serial in","z":"60ac5f9c.a88ba8","name":"Receive Unread SMS after Notification","serial":"44267baf.756834","x":250,"y":420,"wires":[["d450864.15df4f8"]]},{"id":"4703045c.e04d6c","type":"inject","z":"60ac5f9c.a88ba8","name":"Simulate NewSMS Number","topic":"22","payload":"22","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":260,"wires":[["a5af66af.daed4"]]},{"id":"41eca393.60c464","type":"mqtt out","z":"60ac5f9c.a88ba8","name":"SMS_Incoming","topic":"SMSIncoming","qos":"0","retain":"","broker":"6d37922.1f2b16c","x":900,"y":460,"wires":[]},{"id":"86c9a775.9b6ea","type":"inject","z":"60ac5f9c.a88ba8","name":"SetInitalVar","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":170,"y":60,"wires":[["5fcc5242.97be7c"]]},{"id":"5fcc5242.97be7c","type":"function","z":"60ac5f9c.a88ba8","name":"SetVar","func":"\nflow.set('store',0);","outputs":1,"noerr":0,"x":380,"y":60,"wires":[[]]},{"id":"44267baf.756834","type":"serial-port","z":"","serialport":"/dev/ttyS0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"},{"id":"6d37922.1f2b16c","type":"mqtt-broker","z":"","name":"MQTT_Synology","broker":"192.168.xxx.xxx","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
      
      

      Und zuletzt auch ein Flow, um Anrufe zu tätigen. Nach ca. 20 Sekunden wird der Anruf beendet.

      Anrufe.JPG

      [{"id":"a87b5735.0cba5","type":"tab","label":"Anrufe","disabled":false,"info":""},{"id":"2a0bddef.ca1c2a","type":"mqtt in","z":"a87b5735.0cba5","name":"Get_MQTT_Message_and_call_Number","topic":"SimCard.CallNumber","qos":"0","datatype":"json","broker":"6d37922.1f2b16c","x":220,"y":160,"wires":[["6e76bf81.5a0fe"]]},{"id":"6e76bf81.5a0fe","type":"function","z":"a87b5735.0cba5","name":"CheckForNewMessageFromMQTT","func":"\nif(msg.payload.time!==\"0\"){\n    return msg;\n}","outputs":1,"noerr":0,"x":200,"y":300,"wires":[["22c4dbb0.c7c98c","334e625.2858e9e"]]},{"id":"22c4dbb0.c7c98c","type":"function","z":"a87b5735.0cba5","name":"CallNumber","func":"var num = msg.payload.number;\nvar at_cmd = \"ATD\"+num+\";\"; \n\nmsg.payload=at_cmd+\"\\r\";\n\nreturn msg;","outputs":"1","noerr":0,"x":470,"y":280,"wires":[["dee57319.937738","758c56c2.2f294"]]},{"id":"758c56c2.2f294","type":"serial out","z":"a87b5735.0cba5","name":"Serail-Out","serial":"44267baf.756834","x":950,"y":260,"wires":[]},{"id":"334e625.2858e9e","type":"function","z":"a87b5735.0cba5","name":"HangUpAfter[Duration]","func":"\nsetTimeout(function(){\n    node.status({fill:\"red\", shape:\"ring\", text:\" \"});\n    var at_cmd = \"ATH\"; \n    msg.payload=at_cmd+\"\\r\";\n    node.send(msg);\n}, msg.payload.duration*1000);\nnode.status({fill:\"blue\", shape:\"ring\", text:' '});\n\n","outputs":"1","noerr":0,"x":560,"y":340,"wires":[["dee57319.937738","758c56c2.2f294"]]},{"id":"dee57319.937738","type":"debug","z":"a87b5735.0cba5","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":860,"y":360,"wires":[]},{"id":"6d37922.1f2b16c","type":"mqtt-broker","z":"","name":"MQTT_Synology","broker":"192.168.2.XX","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"44267baf.756834","type":"serial-port","z":"","serialport":"/dev/ttyS0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]
      
      

      In Iobroker:
      Die Objekte für MQTT sollten in Iobroker automatisch angelegt werden, sobald ihr in Node-Red den jeweiligen Flow deployed.

      Letztlich habe ich zwei globale Skripts:

      function sendSMS(msg, nr) {
        setState('mqtt.0.SMSMessage','{"time":"'+formatDate(new Date(), "DD.MM.YYYY,hh:mm:ss")+'","number":"'+nr+'","message":"'+formatDate(new Date(), "DD.MM.YYYY,hh:mm:ss")+' Nachricht: ' + msg +'"}');
        setTimeout(function() {
      
         setState('mqtt.0.SMSMessage','{"time":"0","number":"0","message":"0"}');
      
         }, 500);
      
      }
      

      Node-Red lauscht quasi auf Veränderungen im mqtt.0.SMSMessage-Objekt. Wenn diese ungleich 0 sind, wird die SMS verschickt... kurz danach wird das Objekt wieder auf 0 gesetzt, sodass nicht ständig SMS verschickt werden sondern nur einmalig beim Aufrufen der Funktion. Diese Funktion kann nun an jeder beliebigen Stelle eingesetzt werden, um SMS bei (welchen Ereignissen auch immer) zu verschicken.

      Das zweite Skript für Anrufe:

       function callNumber(nr) {
        setState('mqtt.0.CallNumber','{"time":"'+formatDate(new Date(), "DD.MM.YYYY,hh:mm:ss")+'","number":"'+nr+'"}');
        
         setTimeout(function() {
      
               setState('mqtt.0.CallNumber','{"time":"0","number":"0"}');
      
         }, 500);
      }
      

      Der Aufbau ist eigentlich identisch. Der Datumstempel dient hier nur dazu, dem MQTT-Objekt den Unterschied zu 0 zu geben. Der Hintergrund ist der Gleiche wie bei der SMS-Funktion.

      Ich habe das Ganze nun praktisch so im Einsatz, dass mir, wenn z.B. die Wasser-Sensoren, die ich im Keller z.B. bei der Waschmaschine stehen habe, Wasser melden, dass mir dann eine SMS geschickt wird und außerdem ein Anruf auf mein Handy und das Festnetz erfolgt. Auf den Festnetztelefonen habe ich noch einen bestimmten "Alarm-Sound" eingestellt, falls die Nummer der Sim-Karte anruft. So sollte ich eigentlich einen Wassereinbruch nicht verpassen 😉

      Vielleicht kann das Ganze ja jemand gebrauchen oder möchte es nachbauen.
      Sicher ist es mit irgendwelchen Online-Diensten mit SMS-Versand einfacher umsetzbar... aber so muss ich meine Telefonnummern nirgends online angeben und mich nicht irgendwo registrieren.
      Der Raspberry hängt übrigens an einer USV. Also sollte auch bei Stromausfall alles laufen. UND: Durch die Sim-Karte bin ich auch nicht auf das Haus-Internet angewiesen.

      Und zuletzt: Natürlich müsst ihr an einigen Stellen der Flows eure eigene Telefonnummer angeben und die IP eures MQTT-Servers. Dort steht in Moment überall xxx.xxx.
      Und zuletzt: Es gibt auch eine kleine UI von Node-Red, mit der man dort quasi über die angeschlossene SIM-Karte SMS verschicken kann. Das steckt im "SendSMS"-Flow:

      sendSMSUI.JPG

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: [Aufruf] Adapter: Snips - Offline Speak2Text

      Hallo an alle,
      ich habe inzwischen auch Snips (auf Raspberry) installiert bekommen und auch hier die Adapter installiert.
      So langsam lichten sich die ein oder anderen Fragen... aber so ganz durchblicke ich einfach noch nicht alles.
      Daher die Frage, ob hier nicht irgendjemand mal ein Video von seiner Konfiguration machen könnte... einfach mal, damit man auch die ganzen Begrifflichkeiten versteht.

      Es ist ständig die Rede von Injects und Slots etc.... anlernen von Räumen usw. aber der Zusammenhang ist irgendwie total unklar.
      Darüber hinaus verstehe ich auch nicht, wie genau das mit dem text2command-Adapter funktioniert. Immerhin habe ich es hinbekommen, dass mir die aktuelle Temperatur ausgegeben wird... aber zum Beispiel frage ich mich auch, warum es (nur) die paar vorgegebenen Regeln gibt und man zum Beispiel bei der Regel "Rolladen" nichts gar keine Parameter oder die Schlüsselwörter editieren kann.

      Darüber hinaus werden bei mir nur bestimmte Texte, die von Snips gehört werden, in Iobroker in den Objekten angezeigt... und ich weiß nicht warum.

      Es sind viele Fragen, die sicherlich auch andere haben, wenn sie gerade mit Snips angefangen haben.
      Die meisten Antworten sind sicherlich auch hier in diesem Thread zu finden, aber trotz ein bisschen Zeit ist es wirklich müßig, über 600 Beiträge durchzuschauen... (nach 200 konnte ich erstmal nicht mehr 😉 ).
      Daher die Frage oder Idee, ob nicht irgendwer mal ein Video von seinem System machen könnte, damit man mal sieht, wie alles funktionieren kann. Das würde glaube ich wirklich helfen. Ich meine ja gar kein Tutorial (das ist immer super viel Arbeit, das weiß ich), aber so ein Video könnte ja schonmal helfen.

      posted in Tester
      G
      gender
    • Kameraaufnahmen von Synology direkt in VLC-Player

      Hallo zusammen,
      wenn ich mir die aufgenommenen Videos meiner Überwachungskameras eines bestimmten Tages im Schnelldurchlauf anschauen wollte, fand ich es immer sehr umständlich, dies in bspw. der Surveilance-Station anzuschauen. Eine Videodateienliste aller Kameras irgendwie in die VIS einzubauen, war (mit meinen Mitteln) nicht möglich.

      Daher kam mir die Idee, das schnelle Anschauen von Kameravideos zumindest lokal zu lösen (daher ist das hier theoretisch auch eher das falsche Forum, da es nichts im ioBroker oder "SmartHome" zu tun hat, aber vielleicht kann ja dennoch jemand etwas damit anfangen 😉 ).

      Im VLC-Player ist es äußerst komfortabel, die Geschwindwigkeit zu erhöhen/zu reduzieren (habe mir entsprechende Shortcuts auf + und - gelegt).
      Ich habe also ein einfaches Shell-Skript gebaut, dass nach Eingabe einer Zahlenkombination alle Videos einer bestimmten Kamera zu einem bestimmten Tag als Playlist in den VLC-Player legt.

      Voraussetzung ist natürlich:

      • der VLC-Player ist installiert (im Skript muss der Pfad entsprechend eurer Installation angepasst werden)
      • es besteht eine Netzwerkverbindung im Explorer zum entsprechenden Ordner mit den Videofiles der Kameras (im Skript muss der Netzwerkpfad zu euren Kamera-Ordnern natürlich auch angepasst werden).

      Ich finde es äußerst praktisch, da ich so relativ schnell einmal fix alle aufgenommenen Videos einer bestimmten Kamera eines bestimmten Tages angucken kann.
      Vielleicht findet ja jemand Verwendung.

      Hier noch Screenshots:

      Hier ist die Konsole, die nach Kamera und Datum fragt:
      dcf16713-b169-40d9-872c-fd9a62e574f7-image.png

      Hier dann der automisch geöffnete VLC-Player mit einer Playlist der Videos der ausgewählten Kamera und des ausgewählten Tages:
      c869e952-c57b-42da-9cd1-21e383487e2a-image.png

      Und hier das Skript:
      Cams.bat

      posted in Praktische Anwendungen (Showcase)
      G
      gender

    Latest posts made by gender

    • RE: Material Design Widgets: Wetter View

      @ro75

      Vielen Dank.
      Ja inzwischen habe ich mich auch daran erinnert, dass ich an dem "DasWetter"-Adapter etwas geändert habe - und daran liegt es auch. Ich habe die "3-Stunden-Abfrage" des Adapters zusätzlich drin gehabt - daher auch die komische Anzeige.
      Ich hab jetzt wieder ne normale Anzeige von 1h bis 24h.
      Allerdings kriege ich jetzt nicht die Objekte von den "NextDaysDetailed".
      So richtig eindeutig sind die Einträge in den Einstellungen des Adapters leider auch nicht!

      EDIT:
      Habs jetzt auch mit den Detailed-Objekten:
      Hab mich an den Einträgen hier https://forum.iobroker.net/topic/5347/adapter-daswetter/1197 orientiert.

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: Material Design Widgets: Wetter View

      Hallo zusammen,
      ich habe seit einigen Wochen das Problem, dass mir mein Chart nicht mehr korrekt angezeigt wird.
      Ich kann mich leider nicht mehr erinnern, ob es in Zusammenhang mit einem Update eines Adapters kam, da mir das erst später aufgefallen ist.

      Ich benutze für die Darstellung das Skript von Scrounger (Version: 1.0.5) inklusive "DasWetter"-Adapter und "WeatherUnderground"-Adapter. Die Adapter sind auf dem aktuellesten Stand. Es hat nun jahrelang funktioniert - ich habe im Skript natürlich auch nichts geändert.

      Die Werte auf der x-Achse passen leider nicht, wie man im Screenshot sehen kann (es beginnt nicht bei 1h sondern bei 2h mit 3-Stunden-Abständen bis 23h und dann ab 9h erst mit 1-Stunden-Abständen:

      55f44f1e-1125-43f2-ad9f-4c103da6665d-image.png

      Die Labels der x-Achse bzw. die Beschriftungen werden im Skript verteilt / gesetzt - wie gesagt habe ich hier nichts geändert.
      Im Skript werden die x-Axis-Labels hier (falsch) gesetzt:

          for (var i = 1; i <= maxHours; i++) {
              let hour = parseFloat(getState(`${idDasWetter}.Hour_${i}.hour_value`).val.replace(':00'));
      
              if ((maxHours === 24) || maxHours === 8) {
                  axisLabels.push(`${hour}h`);        
              } else {
                  axisLabels.push('');
              }
      ...
      

      Dementsprechend sieht der JSON-Datenpunkt unter Chart/Day_1 auch (falsch) aus:

      {
        "axisLabels": [
          "2h",
          "5h",
          "8h",
          "11h",
          "14h",
          "17h",
          "20h",
          "23h",
          "9h",
          "10h",
          "11h",
          "12h",
          "13h",
          "14h",
          "15h",
          "16h",
          "17h",
          "18h",
          "19h",
          "20h",
          "21h",
          "22h",
          "23h",
          "24h"
        ],
      ...
      

      Mich macht es aber natürlich stutzig, dass sonst keiner dieses Problem hat, oder habe ich etwas nicht mitgekriegt?
      Jemand eine Idee?

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: Echo-Dot Mikrofon abschalten

      @smarthome2020

      Danke, das ist mir klar. Ich persönlich finde es aber ok, wenn Alexa nur zuhört, wenn ich es auch will 🙂

      Ich hatte im Netz schon geguckt. Speziell zum ESP12F ein opotkoppler BC817 habe ich keine Anleitungen gefunden. Hast du einen Link?
      Danke

      posted in Hardware
      G
      gender
    • RE: Echo-Dot Mikrofon abschalten

      @roland1000
      Hi, ich suche auch nach einer Lösung, den EchoDot bzw. das Mikro abzuschalten.
      Könntest du dein Szenario nochmal genauer beschreiben?! Wie hast du den Optokoppler mit dem Mikrofonschalter verbunden. Kannst du Fotos machen?
      Danke.

      posted in Hardware
      G
      gender
    • RE: Kaminofen mit Abgastemperaturfühler

      @saeft_2003

      Der WAF war so von der Funktion begeistert, dass er das lose hängende kabel so akzeptiert hat. Hat mich auch gewundert 😉
      Aber ich denke, es wird tatsächlich nicht so bleiben: Mit feuerfesten magneten könnte ich es näher am Ofenrohr führen. Mal schauen.

      Das die Funktion der Abschaltung grundsätzlich wichtig ist, ist mir natürlich klar. Hin und wieder werde ich es natürlich testen.
      Ich hatte in 4 Jahren IoBroker/Homematic-Laufzeit bei 24h Betrieb tatsächlich noch keinen einzigen Ausfall (!) (mal abgesehen natürlich von den Ausfällen, bei denen ich am System rumgefummelt habe).
      Irgendwo kann ich es nachvollziehen, dass es nicht jeder Schornsteinfeger abnimmt. Auf der anderen Seite (wahrscheinlich dann auch von Bundesland zu Bundesland unterschiedlich) hat der Schornsteinfeger sich wahrscheinlich einmalig von der Funktion zu überzeugen, und das wars dann. Was soll er auch anderes machen. Er kann ja nun auch nicht jede Woche vorbeikommen und kontrollieren, ob es noch geht.

      Unabhängig von der Dunstabzugshaube:
      Das mit dem Holz nachlegen ist schon praktisch: Wir sitzen eben nicht ständig vor dem Kamin und wenn man dann erinnert wird, dass Holz nachgelegt werden muss, finde ich das schon ganz cool 😉

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: Kaminofen mit Abgastemperaturfühler

      @homoran
      Also ich hatte bei der Abnahme keine Probleme.
      Letztlich kann sich der Schornsteinfeger ja auch immer nur den IST-Zustand anschauen, der vorliegt, wenn er alles begutachtet. Ob jemand danach wieder alles abbaut/umbaut, kann er ja nicht wissen.

      Meine Intention dieses Threads war aber ehrlich gesagt auch nur eine "Anregung" für die Temperaturmessung.
      Man kann es ja auch mit einer Einzellösung machen...

      ...oder den Temperatursensor nur zur Überwachung und nicht zur Funktion für die Dunstabzugshaube benutzen.

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: Kaminofen mit Abgastemperaturfühler

      @homoran
      ja klar, warum denn nicht?
      Diese Lösungen über einen Temperaturfühler gibt es auch als Einzelsystem (für viel Geld) zu kaufen.

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • Kaminofen mit Abgastemperaturfühler

      Hallo zusammen,

      wie so viele in letzter Zeit haben wir uns vor kurzem einen Kaminofen angeschafft.
      Als der Schornsteinfeger sagte, die Dunstabzugshaube in der Küche dürfe aus Sicherheitsgründen nur funktionieren, wenn ein Fenster geöffnet ist, klingelten bei mir natürlich sofort die Smarthome-Glocken ;-).

      Trotz WAF musste der Ofen also natürlich irgendwie (ein bisschen) smart werden.
      Da ich keinen Sinn darin sah, die Dunstabzugshaube außer Funktion zu setzen, solange der Ofen gar nicht befeuert wird, war klar, dass ein Temperatursensor her muss.

      Ich habe also das Abgasofenrohr mit einem Temperaturfühler ausgestattet. Die oft im Smarthome benutzen Fühler DS18b20 sind wegen der höheren Temperaturen nicht geeignet. Wenn man sich ein bisschen einliest, gibt es verschiedene "Klassen" für verschiedene Temperaturstufen. Letztlich ist es bei mir ein "Thermoelement Typ K" mit Gewindeeinfassung geworden (genauer dieser hier für knapp 9 Euro: https://www.amazon.de/gp/product/B07R9QZCNT/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)

      Für das Ofenrohr habe ich einen kleinen "Flansch" gefunden, der zunächst mit zwei Schrauben am Ofenrohr befestigt wird. Der Temperaturfühler kann dann in den Flansch eingedreht werden.

      Angeschlossen habe ich den Fühler an einen ESP32 inklusive MAX6675-Modul. Der Controller läuft mit ESP-Easy (hier gibt es praktischerweise eine Konfiguration für die Thermoelemente). Die Werte werden dann per MQTT an den IoBroker gesendet.

      Funktion Dunstabzugshaube
      Die Temperatur wird nun kontinuierlich gemessen. Dabei wird beim Erreichen einer bestimmten Temperaturschwelle die Dunstabzugshabe deaktiviert, sofern gleichzeit kein Fenster in der Küche offen ist.

      Funktion Holz nachlegen
      Außerdem: Man kann relativ gut an der Temperatur erkennen, ob wieder Holz nachgelegt werden muss (bei meinem Ofen so zw. 130 und 140 Grad).
      Wird dieser Wert wieder unterschritten bzw. erreicht, gibt es eine visuelle Nachricht und ein auditives Signal von meinem zentralen Smarthome-Tablet (wirklich sehr praktisch, da man ja nicht ständig vor dem Ofen sitzt).

      2cb570ce-7d3e-4dd3-8d21-796a68c7c4f3-grafik.png

      posted in Praktische Anwendungen (Showcase)
      G
      gender
    • RE: Iframe wird geblockt - Ändern der index.html?

      @oliverio

      ok, danke für die Antwort.

      Falls es jemand wissen will: Ich habe immerhin nun endlich rausgefunden, wie man die index.html ändert: Man muss unter node_modules/iobroker.vis/www die index.src.html ändern und dann mit "iobroker upload vis" den vis-adapter neu laden.

      Dann werden die Änderungen auch übernommen.

      Aber naja, wie @oliverio schon schreibt hat das ändern des content-header dort auch nichts gebracht. Die Loxone-Login-Makse lässt sich trotzdem nicht laden.

      Was mich etwas stutzig macht: Mit diesem Firefox-Addon https://github.com/ThomazPom/Moz-Ext-Ignore-X-Frame-Options kann ich auch die Loxone-Login-Maske in der VIS laden. Das bedeutet für mich, dass es ja doch irgendwie einen Weg per Script geben muss....
      Leider habe ich keine Idee, wie und wo ich die js-Datei aus dem Firefox-Addon einbinden könnte.

      posted in Visualisierung
      G
      gender
    • RE: Iframe wird geblockt - Ändern der index.html?

      und nochmals ich:

      Habe jetzt hier auf Github ein Issue gefunden:
      https://github.com/ioBroker/ioBroker.vis/issues/265

      Da geht es um die gleiche Sache.
      Apollon77 schlägt hier vor, die index.html in nodemodules/iobroker.vis/www/ zu ändern (natürlich mit dem Hinweis, dass es nach einem Update wieder weg ist).

      Nun, was soll ich sagen: Selbst wenn ich dort die index.html bearbeite (und dann einen upload des vis-adapters mache) ist auch diese Datei danach wieder "zurückgeändert".

      Ich gebs langsam auf...

      Acuario4 created this issue in ioBroker/ioBroker.vis

      closed Changes to index.html are not applied #265

      posted in Visualisierung
      G
      gender
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo