Anwendungsbeispiel JsonMod / Gasspeicherfüllstand in DE/EUR

Begonnen von majorshark, 02 August 2022, 07:52:06

Vorheriges Thema - Nächstes Thema

majorshark

Hallo Forum,

hier mal ein Beispiel für das JodsonMod um den Füllstand der Gasspeicher in Deutschland abzufragen. Die Daten stehen unter https://agsi.gie.eu zur Verfügung. Nach einer kostenlosen Anmeldung können diese Daten auch mittels API abgerufen werden und mit JsonMod aufbereitet werden.

Wer es braucht ;-)

Grüße Frank


defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&date=now
attr GasInStorageDE DbLogInclude gasInStorage,injection,trend,full
attr GasInStorageDE comment Status: \
E - Estimated - Geschätzt\
C - Confirm - Bestätigt
attr GasInStorageDE event-on-change-reading gas_Day
attr GasInStorageDE httpHeader x-key: 08154711
attr GasInStorageDE icon gasmeter2
attr GasInStorageDE interval 0 6 * * *
attr GasInStorageDE readingList single(jsonPath('$.gas_day'), 'gas_Day', 'N/A');;\
single(jsonPath('$.data.0.gasInStorage'), 'gasInStorage', 'N/A');;\
single(jsonPath('$.data.0.consumption'), 'consumption', 'N/A');;\
single(jsonPath('$.data.0.consumptionFull'), 'consumptionFull', 'N/A');;\
single(jsonPath('$.data.0.injection'), 'injection', 'N/A');;\
single(jsonPath('$.data.0.withdrawal'), 'withdrawal', 'N/A');;\
single(jsonPath('$.data.0.workingGasVolume'), 'workingGasVolume', 'N/A');;\
single(jsonPath('$.data.0.injectionCapacity'), 'injectionCapacity', 'N/A');;\
single(jsonPath('$.data.0.withdrawalCapacity'), 'withdrawalCapacity', 'N/A');;\
single(jsonPath('$.data.0.status'), 'status', 'N/A');;\
single(jsonPath('$.data.0.trend'), 'trend', 'N/A');;\
single(jsonPath('$.data.0.full'), 'full', 'N/A');;
attr GasInStorageDE room 8.1_Info
attr GasInStorageDE stateFormat Füllstand: full%
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

sash.sc

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

mi.ke

FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

jkriegl

Anbei eine Visialisierung.
Man beachte, dass Haidach ausschließlich ein bayerischer Speicher ist und noch nicht an AT angeschlossen ist. Dieser ist in der Quelle AT zugeordnet und müsste eigentlich DE zugeordnet werden - also eine Verfälschung der DE Befüllung von ca. 2%.
Rheden und Wolfersberg haben die gesetzliche Sollvorgabe von 65% (1. Aug) verfehlt, Haidach ist in AT. Haidach hat derzeit einen trend von 0,31% wird also (bei keiner Verbesserung) das Okt.-Ziel (80%) klar verfehlen!
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

no_Legend

Zitat von: majorshark am 02 August 2022, 07:52:06
Hallo Forum,

hier mal ein Beispiel für das JodsonMod um den Füllstand der Gasspeicher in Deutschland abzufragen. Die Daten stehen unter https://agsi.gie.eu zur Verfügung. Nach einer kostenlosen Anmeldung können diese Daten auch mittels API abgerufen werden und mit JsonMod aufbereitet werden.

Wer es braucht ;-)

Grüße Frank


defmod GasInStorageDE JsonMod https://agsi.gie.eu/api?country=de&date=now
attr GasInStorageDE DbLogInclude gasInStorage,injection,trend,full
attr GasInStorageDE comment Status: \
E - Estimated - Geschätzt\
C - Confirm - Bestätigt
attr GasInStorageDE event-on-change-reading gas_Day
attr GasInStorageDE httpHeader x-key: 08154711
attr GasInStorageDE icon gasmeter2
attr GasInStorageDE interval 0 6 * * *
attr GasInStorageDE readingList single(jsonPath('$.gas_day'), 'gas_Day', 'N/A');;\
single(jsonPath('$.data.0.gasInStorage'), 'gasInStorage', 'N/A');;\
single(jsonPath('$.data.0.consumption'), 'consumption', 'N/A');;\
single(jsonPath('$.data.0.consumptionFull'), 'consumptionFull', 'N/A');;\
single(jsonPath('$.data.0.injection'), 'injection', 'N/A');;\
single(jsonPath('$.data.0.withdrawal'), 'withdrawal', 'N/A');;\
single(jsonPath('$.data.0.workingGasVolume'), 'workingGasVolume', 'N/A');;\
single(jsonPath('$.data.0.injectionCapacity'), 'injectionCapacity', 'N/A');;\
single(jsonPath('$.data.0.withdrawalCapacity'), 'withdrawalCapacity', 'N/A');;\
single(jsonPath('$.data.0.status'), 'status', 'N/A');;\
single(jsonPath('$.data.0.trend'), 'trend', 'N/A');;\
single(jsonPath('$.data.0.full'), 'full', 'N/A');;
attr GasInStorageDE room 8.1_Info
attr GasInStorageDE stateFormat Füllstand: full%


Kann man das noch so 1zu1 übernehmen?`
Bei mir kommen alle Readings nur N/A

Mach ich was falsch?

Danke und Grüße Robert
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

FHEM-User22

Moin,

Dankeschön. Funzt!

@no_Legend: Hast Du Dich angemeldet? Und das Attribut httpHeader gesetzt?

Beste Grüße

PS: Hallo Frank, wo waren wir denn beim Stammtisch?
FHEM auf Raspberry Pi und Proxmox und... und.... und....

FHEM-User22

Moin,

Zitat von: jkriegl am 11 August 2022, 16:43:40
Anbei eine Visialisierung.

sieht gut aus. Könnte man eventuell die Codeschnipsel bekommen?

Beste Grüße
FHEM auf Raspberry Pi und Proxmox und... und.... und....

jkriegl

Gerne {package ui_Table;
$TC{0..3} = "align='left'";
sub sub_farbe {
    my($redgreen)=@_;
    return (int($redgreen)); }
}

card([GasInStDE:trend:col2w],"Trend DE", "",-1,1,15,110,"",undef,2,"90,1,1,,,1,200")
cylinder("DE",0,100,"%",80,70,undef,1,[GasInStDE:full],sub_farbe([GasInStDE:full]),"")
An der Farbe kann man sicher noch etwas verbessern.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

FHEM-User22

Moin,
Dankeschön. Funktioniert.

Beste Grüße aus Grimma
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Gueco315

Hallo Frank,

ich habe mich angemeldet und den key eingetragen. Leider verwende ich dblog nicht sondern nur Log Files. Und ich bekomme keine Daten.
Wie würde es mit einem Logfile funktionieren?

Gruß Günter
Fhem 6.0, JeeLink, CUL 868 auf Raspi 4, Buster, IT-1500, 4x SB_Player, Squeezebox auf Raspi 4, 3x Fritzbox,  WIFI Light, EGPM2LAN, ENIGMA, Sec-SCO,CC-RT-DN,TC-IT-WM-W-EU,SEN-Wa-Od,ES-PMSw1-PW,HM-SE, Sonoff, Shelly,SMA

Gueco315

Klappt, hatte einen Fehler in der ReadingList.

Gruß Günter
Fhem 6.0, JeeLink, CUL 868 auf Raspi 4, Buster, IT-1500, 4x SB_Player, Squeezebox auf Raspi 4, 3x Fritzbox,  WIFI Light, EGPM2LAN, ENIGMA, Sec-SCO,CC-RT-DN,TC-IT-WM-W-EU,SEN-Wa-Od,ES-PMSw1-PW,HM-SE, Sonoff, Shelly,SMA

Damian

Falls jemand noch eine Visualisierung braucht, hier melden.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

#13
Zuerst brauchst du die aktuelle DOIF-Version.

Ein DOIF zum Sammeln der Daten:

defmod di_gasinStorage DOIF {}
attr di_gasinStorage DOIF_Readings full:[GasInStorageDE:full:bar1month]


und Aufbereitung der Daten über devStateIcon:

attr GasInStorageDE devStateIcon {ui_Table::card(ReadingsVal("di_gasinStorage","full",""),undef,"",0,100,0,120,"full in %",undef,"1",",fixedscaling,,,,halfring")}

Falls du die bisherigen Daten nicht geloggt hast und du nicht einen Monat lang auf neue Daten warten willst, kannst du von der Homepage per csv den letzten Monat herunterladen und importieren. Das habe ich gestern auch getan und die Daten des letzten Monats importiert mit:

{DOIF_set_card_data ("di_gasinStorage","GasInStorageDE","full","bar1month",0,"2023.02.04 77.32,2023.02.03 77.6,2023.02.02 77.85,2023.02.01 78.26,2023.01.31 78.6,2023.01.30 79.2,2023.01.29 79.79,2023.01.28 80.36,2023.01.27 81.08,2023.01.26 82.1,2023.01.25 82.81,2023.01.24 83.79,2023.01.23 84.86,2023.01.22 85.84,2023.01.21 86.52,2023.01.20 87.15,2023.01.19 87.95,2023.01.18 88.7,2023.01.17 89.32,2023.01.16 89.87,2023.01.15 90.38,2023.01.14 90.47,2023.01.13 90.53,2023.01.12 90.64,2023.01.11 90.73,2023.01.10 91.01,2023.01.09 91.11,2023.01.08 91.2,2023.01.07 91.09,2023.01.06 90.97,2023.01.05 90.81")}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

#14
Danke! Es funktioniert auch mit ganz anderen Daten.
Anm: min. Wert - Nachkommastellen (? neg. Temperatur?); doppelte Linie bei plus u. minus Werten; mit \&temp_hue habe ich es nicht hinbekommen..

Edit: die Ursprungstemperatur ist nur eine Stelle nach dem Komma
temperature_avg_day     -0.8
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly