Autor Thema: Abfrage Heizölpreis HTTPMOD  (Gelesen 18783 mal)

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #45 am: 18 März 2020, 17:27:53 »
Ha, gerade hab ich das auch festgestellt und wollte schon fragen warum es jetzt schon wieder nicht mehr funktioniert.

==> Deine Änderung eingebaut und es funktioniert wieder.

Super  :) :) :)
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline Jump2016

  • Jr. Member
  • **
  • Beiträge: 51
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #46 am: 18 März 2020, 21:08:26 »
@yersinia Vielen Dank für die Anpassung  :) nun funktionierts auch bei mir wieder

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1844
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #48 am: 19 März 2020, 15:45:36 »
Hi yersinia,
hab durch Zufall gerade einen Logeintrag entdeckt - nur für den Fall, dass das wichtig ist (ich kenne mich da nicht so aus ;) ):

2020.03.19 13:12:14 3: Heizoelpreis: the attribute reading010Expr should no longer be used. Please use reading010OExpr instead
2020.03.19 13:12:14 3: Heizoelpreis: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #49 am: 19 März 2020, 15:50:24 »
Hi yersinia,
hab durch Zufall gerade einen Logeintrag entdeckt - nur für den Fall, dass das wichtig ist (ich kenne mich da nicht so aus ;) ):

2020.03.19 13:12:14 3: Heizoelpreis: the attribute reading010Expr should no longer be used. Please use reading010OExpr instead
2020.03.19 13:12:14 3: Heizoelpreis: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
Ja, hatte ich 'damals' auch gesehen und 'meinen' Definition entsprechend angepasst.
subsevens ursprünglicher Code:
attr Heizoel reading01Expr $val =~ s/,/\./;; $val;;meine Version
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
Das in dem Device zu ersetzen ist kein Hexenwerk.
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1844
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #50 am: 19 März 2020, 15:54:46 »
meine Version
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
Das in dem Device zu ersetzen ist kein Hexenwerk.
Genau so habe ich es bei mir ja auch eingetragen..
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline hdosw

  • New Member
  • *
  • Beiträge: 30
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #51 am: 19 März 2020, 17:03:48 »
Bitte:

attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal("Heizoelpreis","Tankmenge",0)
attr Heizoelpreis room Heizung,Widget
attr Heizoelpreis stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l</div>"}
attr Heizoelpreis userReadings Tankvolumen:none {}, Tankmenge {ReadingsVal("Heizoelpreis","Tankvolumen",0)-ReadingsVal("CN.Blaubrenner","appTanklevel",0)}, Fuellkosten {ReadingsVal("Heizoelpreis","Tankmenge",0)/100*ReadingsVal("Heizoelpreis","Heizoelpreis",0)}

Das Tankvolumen dann manuell setzen (setreading....)

Hallo Bartimaus,
ich habe das Tankvolumen eingebaut nur weiss ich nicht wie ich dies manuell setzen soll  :-\
kannst du mir dies verraten?

Viele Grüße

Offline hdosw

  • New Member
  • *
  • Beiträge: 30
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #52 am: 19 März 2020, 18:09:09 »
Hallo Bartimaus,

habs rausgefunden  :)

Viele Grüße

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #53 am: 20 März 2020, 15:12:31 »
Wäre anstelle eines userReadings nicht ein (zusätzliches) userAttr für das Tankvolumen sinnvoller bzw. einfacher zu pflegen für den Endbenutzer?

Ich stelle mir das so vor:
attr Heizoelpreis userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value Tankvolumen
attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoelpreis Tankvolumen 0
attr Heizoelpreis userReadings Tankmenge {AttrNum($name,"Tankvolumen",0)-ReadingsNum("CN.Blaubrenner","appTanklevel",0)}, Fuellkosten {ReadingsNum($name,"Tankmenge",0)/100*ReadingsNum($name,"Heizoelpreis",0)}
(Anstelle von xxVal würde ich für die Berechnungen xxNum verwenden - und $name anstelle des Devicenamens)

Man könnte noch weiter gehen und das Füllstands-Device und -Reading über zwei weitere User-Attribute definieren:
attr Heizoelpreis userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value Tankvolumen FuellstandDevice FuellstandReading
attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoelpreis Tankvolumen 0
attr Heizoelpreis FuellstandDevice CN.Blaubrenner
attr Heizoelpreis FuellstandReading appTanklevel
attr Heizoelpreis userReadings Tankmenge {AttrNum($name,"Tankvolumen",0)-ReadingsNum(AttrVal($name,"FuellstandDevice","no device defined"),AttrVal($name,"FuellstandReading","no reading defined"),0)}, Fuellkosten {ReadingsNum($name,"Tankmenge",0)/100*ReadingsNum($name,"Heizoelpreis",0)}

(die Raw defines müssten sich nahtlos in die urprüngliche Definition einfügen, einfach die entsprechenden attr, sofern vorhanden, ersetzen)
« Letzte Änderung: 20 März 2020, 16:20:21 von yersinia »
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #54 am: 18 Mai 2020, 14:23:11 »
Konkurrenz belebt das Geschäft, hier eine Version für heizoel24.de zum Testen:
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/heizoelpreise-direkt/%%PLZ%%/%%MENGE%%/%%ENTLADESTELLEN%% 1800
attr Heizoel_heizoel24 userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex <span class="unitprice">([\d\,]+)[\s]+<span
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 36211
attr Heizoel_heizoel24 replacement02Mode text
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value 3500
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 room WHICHROOM
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"Heizoelpreis","2000-01-01 00:00:00"))));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
$ret .= "&nbsp;;<a href=\"".InternalVal($name,"displayurl","https://www.heizoel24.de")."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 webCmd reread
PLZ, Menge und Entladestellen sind wie gehabt; was nicht funktioniert sind Schlauchlänge und Fahrzeugbeschränkungen (hab ich noch nicht herausgefunden, wie man das mit HTTPMOD via POST weiterreicht).
« Letzte Änderung: 18 Mai 2020, 16:04:52 von yersinia »
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #55 am: 02 Dezember 2020, 13:45:09 »
Unter anderem wegen einiger Änderungen im httpmod Modul (das internal displayUrl existiert nicht mehr und wird jetzt im stateFormat zusammengebaut), hier ein kleines Update:

easyoil:
defmod Heizoel_esyoil HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= 3600
attr Heizoel_esyoil userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value
attr Heizoel_esyoil enableControlSet 1
attr Heizoel_esyoil reading010Name Heizoelpreis
attr Heizoel_esyoil reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_esyoil reading010Regex ([\d\,]+)[\s]+€
attr Heizoel_esyoil replacement01Mode text
attr Heizoel_esyoil replacement01Regex %%PLZ%%
attr Heizoel_esyoil replacement01Value 12345
attr Heizoel_esyoil replacement02Mode text
attr Heizoel_esyoil replacement02Regex %%MENGE%%
attr Heizoel_esyoil replacement02Value 3000
attr Heizoel_esyoil replacement03Mode text
attr Heizoel_esyoil replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_esyoil replacement03Value 1
attr Heizoel_esyoil replacement04Mode text
attr Heizoel_esyoil replacement04Regex %%SCHLAUCHLAENGE%%
attr Heizoel_esyoil replacement04Value 40m
attr Heizoel_esyoil replacement05Mode text
attr Heizoel_esyoil replacement05Regex %%ANHAENGER%%
attr Heizoel_esyoil replacement05Value pr-truck-type=short_vehicle
attr Heizoel_esyoil stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.esyoil.com/preisausgabe.php?";;\
$link .= "pr-unloading-points=".AttrVal($name,"replacement03Value","");;\
$link .= "&pr-product=8&pr-payment-type=2";;\
$link .= "&".AttrVal($name,"replacement05Value","");;\
$link .= "&pr-hose-length=".AttrVal($name,"replacement04Value","");;\
$link .= "&pr-app=1&pr-zip=".AttrVal($name,"replacement01Value","");;\
$link .= "&pr-amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&submit=";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_esyoil timeout 10
attr Heizoel_esyoil webCmd reread

heizoel24.de
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/heizoelpreise-direkt/%%PLZ%%/%%MENGE%%/%%ENTLADESTELLEN%% 3600
attr Heizoel_heizoel24 userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex <span class="unitprice">([\d\,]+)[\s]+<span
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 12345
attr Heizoel_heizoel24 replacement02Mode text
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value 3000
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.heizoel24.de/heizoelpreise-direkt";;\
$link .= "/".AttrVal($name,"replacement01Value","");;\
$link .= "/".AttrVal($name,"replacement02Value","");;\
$link .= "/".AttrVal($name,"replacement03Value","");;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 timeout 10
attr Heizoel_heizoel24 webCmd reread
« Letzte Änderung: 03 Dezember 2020, 12:26:56 von yersinia »
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #56 am: 05 Dezember 2020, 09:56:03 »
Dank amenomade sind die beiden Heizölabfragen via esyoil und heizöl24 auch als httpmod.template vorhanden. :)
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7449
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #57 am: 05 Dezember 2020, 18:37:53 »
Dank amenomade sind die beiden Heizölabfragen via esyoil und heizöl24 auch als httpmod.template vorhanden. :)
Naja, eher dank den Autoren der jeweiligen Templates (subseven+yersinia und yersinia). Ich habe nur eingecheckt ;)
« Letzte Änderung: 05 Dezember 2020, 18:54:11 von amenomade »
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Offline daheim

  • Full Member
  • ***
  • Beiträge: 133
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #58 am: 21 Juni 2021, 13:15:29 »
Hallo zusammen,
meine ich das nur oder funktioniert Heizöl24 nicht mehr? Habe die URL auf das aktuelle Format angepasst aber ich bekomme nichts geliefert...

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1161
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #59 am: 21 Juni 2021, 15:28:55 »
Ja, funktioniert bei mir seit dem 17.05. auch nicht mehr.
Habe die URL auf das aktuelle Format angepasst aber ich bekomme nichts geliefert...
Was heisst aktuelles Format?
https://www.heizoel24.de/heizoel/angebotsliste?zipCode=%%PLZ%%&amount=%%MENGE%%&stations=%%ENTLADESTELLEN%%&product=1?

Die URL allein reicht nicht, die RegEx muss auch angepasst werden. Da ist mir aber auch noch überhaupt nicht klar, was fhem via httpmod hier überhaupt empfängt und wie die RegEx auszusehen hat. :-\
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

 

decade-submarginal