Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Projekt: Shelly plus1 AddOn Temperaturen mit JS auslesen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    853

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Projekt: Shelly plus1 AddOn Temperaturen mit JS auslesen

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
1 Beiträge 1 Kommentatoren 425 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • fuzzy1955F Online
    fuzzy1955F Online
    fuzzy1955
    schrieb am zuletzt editiert von fuzzy1955
    #1

    In meiner kurzen IoBroker-„Laufbahn“ seit Oktober 2024 habe ich eifrigst an dem wundervollen OpenSource-Tool einige praktische Anwendungsbeispiele erprobt. Eines davon ist das automatisierte Auslesen von 3 Temperatursensoren und die 10-minütige Speicherung der Werte in einer MySQL-Datenbank. Das Projekt läuft seit 3 Wochen im Testbetrieb und wird ein Teil meiner geplanten Heizungssteuerung mit IoBroker. Darin befindet sich auch ein Luftsolarkollektor der deutschen Firma Grammer Solar, den ich seit 2007 nicht mehr missen möchte. In diesem Projekt wurde bewusst auf den Shelly-Adapter verzichtet, weil ich als Programmier-Freak gerne die Freiheiten in JavaScript genieße.

    Hardware:
    • RaspBerry Pi 4 mit 4 GB RAM im Hutschienengehäuse; Linux Debian an USB2-Stick mit 256 GB
    • Shelly Plus1 mit AddOn
    • 3 x Temperatursensoren DS18B20

    Adapter:
    • Javascript

    Ablauf:
    • An den Shelly Plus1 mit AddOn werden die Temperatursensoren angeschlossen und anschließend in der eingestellten IP-Adresse im Internet-Browser unter dem Punkt „Add-on“ konfiguriert.

    Shelly Pro 1 AddOn Temperatursensoren.jpg

    In dieser Web-Oberfläche kann man auch sofort die Temperaturen ablesen.

    • Im IoBroker wechselt man zu „Objekte“ und legt folgende Datenpunkte zuerst unter „javascript.0.scriptEnabled.Eigene_Datenpunkte“ an:

    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01.Aussentemperatur
    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01. Innentemperatur
    javascript.0.scriptEnabled.Eigene_Datenpunkte.ShellyPlus1_01. Luftsolartemperatur

    • Dann legt man die gleichen DP unter „alias.0.Klimatisierung (als Beispiel)“ an und referenziert sie auf die DP unter „javascript.0.scriptEnabled.Eigene_Datenpunkte“ und aktiviert – wahlweise - die automatische SQL-Speicherung (Zahnrad rechts im Datenpunkt). Die DP sind aber auch ohne SQL-Speicherung direkt in Skripts verwendbar:

    alias.0.Klimatisierung.ShellyPlus1_01.Aussentemperatur
    alias.0.Klimatisierung.ShellyPlus1_01.Innentemperatur
    alias.0.Klimatisierung.ShellyPlus1_01.Luftsolartemperatur

    IoB_Objekte_Alias.jpg

    Dazu habe ich von mehreren Forums_Usern den wertvollen Tipp gelesen, dass eine eigene DP-Struktur unter alias.0.xxx... sehr hilfreich in Blick auf die Übersichtlichkeit ist. Meine Struktur schaut teils so aus:

    IoB_Objektstruktur.jpg

    • Im IoB wechselt man dann zu „Skripte – neues Skript (+) – JavaScript“ und legt folgendes Skript an:

    var data;
    
    schedule("*/10 * * * * *", async () => {
      httpGet('http://192.168.xxx.xxx/rpc/temperature.getstatus?id=100', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Aussentemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    
      httpGet('http://192.168. xxx.xxx /rpc/temperature.getstatus?id=101', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Innentemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    
      httpGet('http://192.168. xxx.xxx /rpc/temperature.getstatus?id=102', { 
            timeout: 2000, responseType: 'text' }, async (err, response) => {
            data = (() => { 
            try { 
                setState('alias.0.Klimatisierung.ShellyPlus1_01.Luftsolartemperatur', getAttr(JSON.parse(response.data), 'tC'), true);
                }
            catch (e) { 
                return {}; 
                }
            })();
      });
    });
    
    

    Dieses Skript aktiviert man mit Klick auf den roten Pfeil und damit läuft es dann alle 10 Minuten. Die Zeit kann jeder beliebig einstellen. Die Werte werden – wahlweise - in die MySQL-Datenbanktabelle „ts_number“ geschrieben. Die MySQL-Tabellen habe ich selbst angelegt – wiederum aufgrund von Internet-Recherchen (ich bin halt ein Datenbank-Fan):

    CREATE TABLE sources(  
    	id INTEGER NOT NULL AUTO_INCREMENT,
    	name VARCHAR(255) NOT NULL,  
    PRIMARY KEY (id)) ENGINE = InnoDB;
    
    CREATE UNIQUE INDEX IX_sources01 ON sources(name);
    
    CREATE TABLE datapoints(  
    	id INTEGER NOT NULL AUTO_INCREMENT,  
    	name TEXT NOT NULL,
    	type INTEGER NOT NULL,  
    PRIMARY KEY (id)) ENGINE = InnoDB;
    
    CREATE UNIQUE INDEX IX_datapoints01 ON datapoints(name);
    
    CREATE TABLE ts_number(  
    	id INTEGER NOT NULL AUTO_INCREMENT,  
    	ts BIGINT NOT NULL,
    	val REAL,
    	ack BOOLEAN,
    	q INTEGER NULL,
    	_from INTEGER NOT NULL,
    PRIMARY KEY (id,ts)) ENGINE = InnoDB;
    
    CREATE INDEX IX_ts_number01 ON ts_number(ts);
    CREATE INDEX IX_ts_number02 ON ts_number(id);
    CREATE INDEX IX_ts_number03 ON ts_number(id);
    

    Die Abfrage für die Visualisierung (auch von Zeitreihen) lautet:

    CREATE OR REPLACE VIEW vw_temperaturen AS 
    SELECT a.id, from_unixtime(SUBSTRING(a.ts, 1, 10)) AS tsDate, a.val AS GradC, b.name, c.name as sourcename
    FROM ts_number a LEFT OUTER JOIN
    	datapoints b ON a.id = b.id LEFT OUTER JOIN
    	sources c ON a._from = c.id
    WHERE a.id in (xx, yy,zz) AND a.q = 0; //siehe Tabelle datapoints 
    
    

    Diese Abfrage lässt sich etwa bei den IoB-Diagrammen einsetzen:

    IoB_Diagramm01.jpg

    Nun – das war es. Ich freue mich, wenn das Beispiel für manche von euch verwendbar ist.

    Beste Grüße aus dem Mühlviertel, hf

    Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
    Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
    PV: 10 kWp Module, 2 x Deye WR SUN-10K, 2 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

    1 Antwort Letzte Antwort
    0
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    473

    Online

    32.6k

    Benutzer

    82.1k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe