Spritpreismonitor 2.0 – Individualisierter Tankalarm

INFO: Wie soll es auch anders sein, sind leider nachdem "Release" noch ein paar Fehler aufgetaucht. Also bitte nicht Böse sein, wenn es an paar Stellen noch ein bisschen hapert. 


Solltet ihr Fehler finden, würde ich mich über ein Kommentar mit einer genauen Beschreibung wann der Fehler auftritt freuen. Vielen Dank

Versionsverlauf:

Version

Release

Beschreibung

23.02.2017

Spritpreismonitor ohne Anpassungsmöglichkeiten

05.06.2017

Neuauflage mit Anpassungsmöglichkeiten

03.07.2017

Fehlerbehebung Einmalnachricht morgens, mittags,abends

Funktionsvorschläge für Version 3.0

  • Anpassen der Zeiten für die Einmalnachrichten (z.B. nach der Arbeit)
  • Sortierung innerhalb der Nachricht nach den Kraftstoffpreis
  • Weitere Option zur Individualisierung der Nachrichten
  • Tankstellenübergreifendes Bewertungssystem - bewirkt, dass ein Preis keine 5-Sterne Bewertung bekommt, obwohl der Preis von allen Tankstellen der teuerste ist.
  • Option zur Auswahl der obligatorischen 0,9ct
  • Auswahl des Nachrichtendienstes - Telegramm - Pushover - Email

Ende Februar habe ich einen Blogbeitrag über einen Spritpreismonitor und einen Tankalarm geschrieben. Einige meiner Blogleser haben diesen auch schon nachgebaut. Es kam jedoch schnell der Wünsch nach einem erweiterten Tankalarm auf. Die Anzahl an gesendeten Nachrichten war relativ hoch und zudem gab es keine Möglichkeit diese anzupassen. Es kam also sehr schnell der Wunsch nach einem Sprimonitor 2.0 auf. Aus diesem Grund habe ich mich etwas intensiver mit dem Thema Tankalarm und FHEM auseinander gesetzte und eine erweiterte Version meines Spritpreismonitors zusammen gebastelt. 

Vorbereitung

Da dieser Spritalarm auf die erste Version meines Spritpreismonitors aufbaut, gehe ich in diesem Artikel nicht auf die Definition der Tankstellen-Devices ein. Ihr solltet also bevor ihr mit der Einrichtung fortfahrt, eure Tankstellen-Devices einrichten. Wie dies funktioniert erfahrt ihr in meinem Blogbeitrag. Wichtig ist die Definition der Tankstellen-Devices. Des Weiteren muss für eine korrekte Funktion die Statistik für die Preise eingerichtet werden. Auch dies ist im Beitrag zur ersten Version erklärt. Die Einrichtung der ReadingsGroup und des Spritalarms 1.0 könnt ihr euch sparen und anstelle der Einrichtung hier folgen.

WICHTIG: Die Tankstellen-Devices müssen alle mit "Tankstelle" beginnen. Zum Beispiel "TankstelleARAL" oder "TankstelleREAL".​

Funktionen

Im Vergleich zur ersten Version des Spritpreismonitors wird diese Version ein paar extra Funktionen besitzen.

  • definieren von mehreren Alarmen möglich
  • ON / OFF
  • Auswahl des Empfängers
  • Auswahl welcher Kraftstoff von welcher Tankstelle
  • Auswahl zwischen ausführlicher und minimalisierter Nachricht
  • Festlegen eines Zeitraums in der Nachrichten gesendet werden sollen
  • Festsetzten des Nachrichten-Intervalls: stündlich, 2-stündlich, bei Änderung
  • Festlegen einer Preisänderungs-Schwelle, die erreicht werden muss, damit eine Nachricht gesendet wird
  • Button für sofortiges Senden einer Nachricht
  • Einmalnachricht zur bestimmten Zeit: morgens (7 Uhr), mittags (12 Uhr), abends (18 Uhr)
  • Einfärben des niedrigsten Preises

Im folgenden erkläre ich kurz die einzelnen Funktionen und liste die involvierten Readings und Subroutinen auf. Readings, welche mit einem Sternchen (*) versehen sind, sind Readings, welche sich im Tankstellen-Device selber befinden. Die anderen Readings sind welche vom Sprimonitor-Dummy, welches weiter unten eingerichtet wird. Der Platzhalter x steht dabei für die Nummer des Spritalarms (1, 2, etc.) und KRAFTSTOFF für den entsprechenden Kraftstoff. Die Subroutinen sind so ausgelegt, dass theoretisch unendlich viele Alarme eingerichtet werden können. 

ON / OFF

Durch den ON / OFF Button lässt sich der ganze Spritpreismonitor bzw. der Tankalarm deaktivieren. Dies hat zur Folge, dass keine Einmalnachrichten und keine Intervallnachrichten mehr gesendet werde. Das Senden einer Sofortnachricht über das Briefsymbol ist weiterhin möglich.

Involvierte Readings: x_​aktiv

Involvierte Subroutinen: setONOFF("x")

Empfänger

Über das Empfänger-Drop-Down-Menü lässt sich der Empfänger für die Nachrichten auswählen. Wie ihr eure Empfänger angebt, erfahrt ihr weiter unten unter "Aufbau".

WICHTIG: Hier wird der Username verwendet. Die Subroutinen funktionieren zur Zeit auch nur mit dem Usernamen, da das Senden der Nachricht mit "@@" eingeleitet wird.​

Involvierte Readings: x_Empfaenger

Involvierte Subroutinen: setONOFF("x")

Tankstellen- und Kraftstoffauswahl

Unter der Konfigurationszeile werden die einzelnen Tankstellen-Devices angezeigt. Hier lässt sich nun über die Buttons auswählen, welcher Kraftstoff von welcher Tankstelle verwendet werden soll. Ein grüner Button bedeutet, dass der ausgewählte Kraftstoff überwacht wird. Es werden automatisch alle Tankstellen-Devices aufgelistet, dessen Name mit "Tankstelle" beginnt. Als Kraftstoffe werden Super E10, Super E5 und Diesel angezeigt.

Involvierte Readings: x_KRAFTSTOFF_aktiv*

Involvierte Subroutinen: create_message("x"), 

Art der Nachricht

Direkt neben den Buttons lässt sich auswählen, ob ausführliche oder minimalisierte Nachrichten gesendet werden sollen. Beide Nachrichtentypen beinhalten die Sternebewertung, welche aus der ersten Version des Spritpreismonitors bekannt ist und den aktuellen Kraftstoffpreis. Die ausführliche Nachricht enthält zusätzlich, die Auflistung, welche Durchschnittswerte übertroffen wurde.

Involvierte Readings: x_msgArt*

Involvierte Subroutinen: Tankstatistik($Tankstelle, $Kraftstoff, $msgArt, x)

Zeitraum

Über die Zeitraum-Drop-Down-Menüs lässt sich der Zeitraum einstellen, in der Nachrichten gesendet werden sollen. Außerhalb dieses Zeitraumes werden keine Nachrichten gesendet (x_Zeitraum = 0). Wird über die Drop-Down-Menüs ein neuer Zeitraum eingestellt, beginnt der Intervall von vorne und es wird sofort die erste Intervallsnachricht gesendet. Bei der ersten gesendeten Nachricht wird die Schwelle ignoriert, da die letzte gesendete Nachricht ja schon etwas her sein kann. Erst aber der zweiten Nachricht wird die Schwelle wieder berücksichtigt. 

Ändert man also um 14:54 Uhr den eingestellten Intervall von 07-20 Uhr auf 08-20 Uhr mit einem stündlichen Intervall, so startet der Intervall neu und sendet sofort die erste Intervallsnachricht (ohne Berücksichtigung der Schwelle). Die nächste Nachricht wird dann um 15:54 Uhr gesendet (mit berücksichtigung der Schwelle). Den gewünschten Intervall (8 Uhr, 9 Uhr ...) wird somit erst am nächsten Tag ordnungsgemäß arbeiten.

Involvierte Readings: x_hh_Anfang, x_mm_Anfang, x_hh_Ende, x_mm_Ende, x_Zeitraum

Involvierte Subroutinen: setZeitraum("x"), sendAenderung("x"), nextIntervall("x"), create_message("x")

Nachrichtenintervall

Über das Drop-Down-Menü für das Intervall lässt sich einstellen, wie oft Nachrichten versendet werden sollen. Hier kann man zwischen einen "stündlichen" oder "2-stündlichen" Intervall wählen. Oder man wählt "bei Änderung" und man bekommt bei jeder Preisänderung eine Nachricht.  

Unter dem Intervall-Drop-Down-Menü wird der Zeitpunkt der nächsten Intervallnachricht angezeigt.

Involvierte Readings: x_Intervall, x_Intervallcall, x_next_Intervall

Involvierte Subroutinen: nextIntervall("x"), create_message("x")

Schwelle​

Über den Schieberegler lässt sich eine Schwelle einstellen, welche erreicht werden muss, damit bei einer Preisänderung eine Nachricht gesendet wird. Über das untere Drop-Down-Menü lässt sich zudem einstellen, ob der eingestellte Schwellenwert bei einer Preiserhöhung, einer Preissenkung oder in beide Richtungen aktiv sein soll. Ist z.B. eine Schwelle von 3ct eingestellt und das Drop-Down-Menü auf "günstiger" eingestellt ist, so wird erst eine Nachricht gesendet, wenn der Preis mindestens 3 ct günstiger ist, als der zuvor gesendete Wert. Als gesendeter Wert wird nun der Wert gesehen, welcher ebenfalls über das Intervall gesendet wurde. Einmal- oder Sofortnachrichten werden demnach nicht als gesendeter Wert angesehen.

Involvierte Readings: x_Schwelle, x_Schwelle_option, x_KRAFTSTOFF_Differenz*, x_KRAFTSTOFF_Schwelle_status*, 1_sendWert_KRAFTSTOFF*

Involvierte Subroutinen: checkSchwelle(x, $Tankstelle, $Kraftstoff)

Sofortnachricht

Über den Briefumschlag lässt sich eine Sofortnachricht senden lassen. Es wird die Kraftstoff- und Tankstellenauswahl berücksichtigt. Des Weiteren wird die Auswahl der Nachrichtenart berücksichtigt. Die Schwelle findet bei der Sofortnachricht jedoch keine Anwendung.

Involvierte Readings: x_now_message, x_speicherWert

Involvierte Subroutinen: sendOneTime ("x"), create_message("x")

Einmalnachricht

Über ein Drop-Down-Menü lässt sich auswählen, zu welcher Tageszeit eine Einmalnachricht gesendet werden soll. Hier lässt sich "morgens", "mittags", "abends" oder "morgens-mittags-abends" auswählen. Je nachdem wird dann eine Einmalnachricht um 7 Uhr, 12 Uhr, 18 Uhr bzw. zu jedem der drei Zeitpunkte eine Nachricht gesendet. Die zusendende Nachricht ist gleichzusetzen mit der Sofortnachricht. Es wird also die Kraftstoff-, Tankstellen- und Nachrichtentypauswahl berücksichtigt. Die Schwelle findet, genau wie bei der Sofortnachricht, keine Anwendung.

Die Einmalnachrichten laufen parallel zu den Intervallsnachrichten. Ist also ein Intervall ab 8 Uhr mit einem stündlichen Intervall eingestellt, so wird bei einer mittags-Einmalnachricht um 12 Uhr zwei Nachrichten gesendet.​

Unter dem Drop-Down-Menü wird der Zeitpunkt der nächsten Einmalnachricht angezeigt.

Involvierte Readings: x_one_time_message, x_next_one_time_message, , x_speicherWert, x_statusOneTime

Involvierte Subroutinen: sendOneTime ("x"), setOneTime("x"), create_message("x")

Aufbau

Aufgrund der zusätzlichen Funktionen kommt der Spritmonitor 2.0 nicht mehr mir ein nur einem Notify und einer kleinen Subroutine aus. Insgesamt besteht der Komplex aus einem Dummy, Notify, vier at-Devices, eine ReadingsGroup und ein Haufen von Subroutinen. Um die Einrichtung dennoch relativ einfach zu halten, habe ich so gut es geht versucht alles in die Subroutine auszulagern und darauf verzichtet individuelle Device-Namen zu verwenden, so dass jeder die Subroutinen kopieren kann ohne die Devicenamen seinem Setting anzupassen. 

Des Weiteren sind die Routinen so aufgebaut, dass ohne Änderungen an den Routinen beliebig viele Alarme eingerichtet werden können. Dazu muss einfach nur für jeden Alarm die vier at-Devices eingerichtet werden und die ReadingsGroup entsprechend erweitert werden. Mehr dazu weiter unten.

Im folgenden werde ich euch den Aufbau des Spritmonitors näher erläutern. Die benötigte Datei mit den Subroutinen könnt im Kapitel Subroutine kostenlos herunterladen. 

INFO: Die später eingerichteten Subroutinen lassen sich weiter unten um Beitrag downloaden. In diesem ZIP-File befindet sich auch eine Kopiervorlage für die Device-Definition und Attribut-Vergabe. Dies sichert euch eine Fehlerfreie Einrichtung ohne Anführungszeichen- oder Umbruchfehler. 

Der Spritmonitor-Dummy

Die Sammelstelle der ganzen Einstellungen bzw. Readings ist ein Dummy.

define Spritmonitor dummy

Jedes Reading hat ein Präfix, welches die Nummer des Spritalarms definiert. In diesem Artikel werden zwei Spritalarme eingerichtet. 

Für die Ersteinrichtung ist es sinnvoll die ganzen Readings einmal vorzudefinieren. Mit folgendem Befehl lassen die benötigten Readings einrichten:

ACHTUNG: Achtet beim Kopieren der Befehle darauf, dass der Befehl korrekt in der Befehlszeile in FHEM eingefügt wird. Gerade bei den Befehlen mit Zeilenumbrüchen, welche ich aufgrund der besseren Übersichtlichkeit eingefügt habe, kann es zu Fehlern beim Kopieren führen. Tipp: Kopiert den Befehl zunächst in einen einfachen Texteditor und entfernt die Zeilenumbrüche.


Alternativ könnt ihr weiter unten eine Kopiervorlage downloaden.

setreading Spritmonitor 1_Empfaenger waschto; 
setreading Spritmonitor 1_Intervall stündlich;
setreading Spritmonitor 1_Intervallcall on;
setreading Spritmonitor 1_Schwelle 0;
setreading Spritmonitor 1_Schwelle_option teurer;
setreading Spritmonitor 1_Zeitraum aktiv;
setreading Spritmonitor 1_aktiv on;
setreading Spritmonitor 1_firstCall 0;
setreading Spritmonitor 1_hh_Anfang 07;
setreading Spritmonitor 1_hh_Ende 22;
setreading Spritmonitor 1_mm_Anfang 00;
setreading Spritmonitor 1_mm_Ende 00;
setreading Spritmonitor 1_next_Intervall Nächste 18:00;
setreading Spritmonitor 1_next_one_time_message Nächste 18 Uhr;
setreading Spritmonitor 1_now_message 0;
setreading Spritmonitor 1_one_time_message abends;
setreading Spritmonitor 1_speicherWert ja
setreading Spritmonitor 1_statusOneTime nein
setreading Spritmonitor 2_Empfaenger waschto;
setreading Spritmonitor 2_Intervall stündlich;
setreading Spritmonitor 2_Intervallcall on;
setreading Spritmonitor 2_Schwelle 0;
setreading Spritmonitor 2_Schwelle_option teurer;
setreading Spritmonitor 2_Zeitraum aktiv;
setreading Spritmonitor 2_aktiv on;
setreading Spritmonitor 2_firstCall 0;
setreading Spritmonitor 2_hh_Anfang 07;
setreading Spritmonitor 2_hh_Ende 22;
setreading Spritmonitor 2_mm_Anfang 00;
setreading Spritmonitor 2_mm_Ende 00;
setreading Spritmonitor 2_next_Intervall Nächste 18:00;
setreading Spritmonitor 2_next_one_time_message Nächste 18 Uhr;
setreading Spritmonitor 2_now_message 0;
setreading Spritmonitor 2_one_time_message abends;
setreading Spritmonitor 2_speicherWert ja
setreading Spritmonitor 2_statusOneTime nein
setreading Spritmonitor Telegram Telegram

Die Werte können so übernommen werden. Sie dienen lediglich der Vordefinition der Readings. Einzig das Reading "1_Empfaenger" sollte bereits auf einen vorhandenen Empfänger gesetzt werden. Hier muss der Telegram-Benutzername eingetragen werden.

WICHTIG: Hier muss der Username verwendet werden. Die Subroutinen funktionieren zur Zeit auch nur mit dem Usernamen, da das Senden der Nachricht mit "@@" eingeleitet wird.​

Des Weiteren muss das Reading "Telegram" angepasst werden. Hier müsst ihr den Namen eures Telegramm-Devices angeben. Ich meinem Fall lautet dieses "Telegram".​

Des Weiteren muss ein Reading gesetzt werden, welches alle gewünschten Tankstellen enthält. Die Tankstellen werden durch ein Komma getrennt. Es muss der exakte Name des Tankstellen-Device angegeben werden.

setreading Spritmonitor Tankstellen TankstelleARAL,TankstelleESSO,TankstelleOWM,TankstelleREAL​

Damit alles ordnungsgemäß funktioniert, müssen die Namen der Tankstellen-Devices mit "Tankstelle" anfangen. Also zum Beispiel TankstelleARAL oder TankstelleREAL.

Ich denke die restlichen Readings sind alle selbsterklärend. ​

Solltet ihr zwei Spritalarme einrichten wollen, solltet ihr auch für diesen die Readings bereits vordefinieren. Dazu einfach das Präfix zu "2_" ändern.

Des Weiteren ist es notwendig, die einzustellenden Readings in das Attribut readingList einzutragen.

attr Spritmonitor readingList 1_aktiv, 1_Empfaenger, 1_now_message; 1_Intervall, 1_Schwelle, 1_Schwelle_option, 1_hh_Anfang, 1_hh_Ende, 1_mm_Anfang, 1_mm_Ende, 1_next_Intervall, 1_next_one_time_message, 1_one_time_message, 2_aktiv, 2_Empfaenger, 2_now_message; 2_Intervall, 2_Schwelle, 2_Schwelle_option, 2_hh_Anfang, 2_hh_Ende, 2_mm_Anfang, 2_mm_Ende, 2_next_Intervall, 2_next_one_time_message, 2_one_time_message​

Für eine bessere Übersichtlichkeit kann man noch das stateFormat des Dummys anpassen:

attr Spritmonitor stateFormat Spritmonitor 1: 1_aktiv - Zeitraum: 1_Zeitraum - Intervall: 1_next_Intervall<br>Spritmonitor 2: 2_aktiv - Zeitraum: 2_Zeitraum - Intervall: 2_next_Intervall​

Das Notify

Das Bindeglied zwischen dem Frontend (Eingabefeld) und dem Backend (Subroutine) bildet das Notify. Dieses ruft bei einer Eingabe die entsprechende Subroutine auf. 

define notify_Spritmonitor notify Spritmonitor:.* {callRoutine("$EVTPART0")}

Wird ein Reading durch das Eingabefeld (ReadingsGroup) geändert, springt das Notify an und ruft die Subroutine "callRoutine" auf und übergibt dieser das Reading, welches geändert wurde. In der aufgerufenen Routine wird dann abhängig vom Reading die entsprechende Routine aufgerufen.

at-Device - nextIntervall

Das at-Device "x_nextIntervall" wird aktiviert, sobald die Intervallnachricht aktiviert ist. Wird eine Intervallnachricht gesendet, so wird das at-Device auf den Zeitpunkt gesetzt, zu der die nächste Intervallnachricht gesendet werden soll. Löst es aus, wird die Subroutine zum Senden der Nachricht aufgerufen. ​

define 1_nextIntervall at *12:00 {nextIntervall("1")}​
define 2_nextIntervall at *12:00 {nextIntervall("2")}​

Für jeden Spritalarm muss ein separates at-Device eingerichtet werden (1_nextIntervall, 2_nextIntervall usw.). Die Übergebene Zahl muss dann entsprechend angepasst werden (z.B. nextIntervall("2")). Die angegebene Zeit (12:00) ist nur ein Platzhalter und wird später über die Routinen gesetzt bzw. angepasst.

at-Device - oneTime

Das at-Device "x_oneTime" wird aufgerufen, wenn ein Einmalnachricht zu den eingestellten Zeiten gesendet werden soll - morgens, mittags, abends. Je nachdem was eingestellt ist, wird der Timespec des at-Devices durch die Subroutinen gesetzt. Für die Definition kann man zunächst eine beliebige Uhrzeit nehmen.

define 1_oneTime at ​*12:00 {sendOneTime("1")}
define 2_oneTime at ​*12:00 {sendOneTime("2")}

Auch hier wird wieder für jeden Alarm ein getrenntes at-Device benötigt.

at-Device - zeitraumAnfang - zeitraumEnde

Die beiden at-Device "x_zeitraumAnfang" und "x_zeitraumEnde" sind für die Zeitraumsteuerung zuständig. Sie starten bzw. beenden zu den eingestellten Zeiten den Zeitraum. 

define 1_zeitraumAnfang at *07:00 {nextIntervall("1")}
define 1_zeitraumEnde at *22:00 {offIntervall("1")}
define 2_zeitraumAnfang at *07:00 {nextIntervall("2")}
define 2_zeitraumEnde at *22:00 {offIntervall("2")}

Auch hier muss wieder für jeden Alarm je ein Anfangs-at-Device und ein Ende-at-Device eingerichtet werden. Die bei der Definition angegebenen Zeitpunkte dienen wieder nur als Platzhalte und werden später über die Routinen abhängig von den Benutzereingaben eingestellt.

Das Kraftstoff-Notify

Das Kraftstoff-Notify ist für die Intervalleinstellung "Änderung" zuständig. Ändert sich der Kraftstoffpreis ruft das Notify die entsprechende Routine auf.

define 1_notifyKraftstoff notify Tankstelle.*:(SuperE10|SuperE5|Diesel):.* {sendAenderung("1")}
define 2_notifyKraftstoff notify Tankstelle.*:(SuperE10|SuperE5|Diesel):.* {sendAenderung("2")}

Die Tankstellen-Devices

Um eine Steuerung zu ermöglichen, welcher Kraftstoff von welcher Tankstelle überwacht werden soll, bekommen die Tankstellen-Devices selber auch ein paar Zusatzreadings. Diese werden beim Auswählen der Kraftstoffe über die ReadingsGroup automatisch erstellt bzw. aktualisiert. 

Das Reading "x_Differenz" gibt die Differenz zwischen dem letzten gesendeten Wert und dem aktuellen Wert (beim Erstellen der Nachricht) an. Diese Differenz wird dann mit der eingestellten Schwelle überprüft und geschaut, ob eine Nachricht gesendet werden soll. Je nach Ergebnis wird das Reading "x_Schwelle_status" auf "nein" oder "ja" gesetzt.

Das Reading "x_aktiv" gibt an, ob der entsprechende Kraftstoff aktiv ist, das heißt ob er überwacht werden soll. 

"x_msgArt" gibt an, welches Format die Nachricht dieser Tankstelle haben soll. Entweder "minimal" oder "ausführlich". 

Die Readings "x_sendWert_x" beinhalten den zuletzt gesendeten Wert. Hier werden jedoch nur die Werte abgespeichert, welche über die Intervallnachrichten gesendet wurden, da nur hier die Schwelle relevant ist. ​

Auch hier empfehle ich euch, die wichtigen Readings zum Beginn einmal vor zudefinieren:

setreading TankstelleARAL 1_msgArt minimal;
setreading TankstelleARAL 1_Diesel_aktiv ja;
setreading TankstelleARAL 1_SuperE10_aktiv ja;
setreading TankstelleARAL 1_SuperE5_aktiv ja;
setreading TankstelleARAL 2_msgArt minimal;
setreading TankstelleARAL 2_Diesel_aktiv ja;
setreading TankstelleARAL 2_SuperE10_aktiv ja;
setreading TankstelleARAL 2_SuperE5_aktiv ja;

Dies entsprechend für alle Tankstellen-Devices vornehmen.

readingsGroup - Das Eingabefeld

Das Eingabefeld wird über eine readingsGroup realisiert. Für jeden Spritalarm wird ein extra Bereich definiert. Folgender Befehl definiert eine readingsGroup mit zwei Spritalarme. Vorraussetzung ist natürlich, dass ihr auch die oben beschriebenen at-Devives jeweils doppelt definiert habt.  

Folgende Definition bindet automatisch alle Tankstellen-Devices ein, dessen Namen mit "Tankstelle" anfangen. Die Tankstellen-Devices sollten auch so benannt werden, damit die Subroutinen ohne Anpassungen übernommen werden kann.

define Sprit readingsGroup ​<>,<ON/OFF>,<|>,<Einmalnachricht>,<|>,<Zeitraum>,<|>,
<Intervall>,<|>,<Schwelle (ct)> Spritmonitor:1_aktiv,<|>,1_one_time_message,<|>,
<von>,1_hh_Anfang,<:>,1_mm_Anfang,<|>,1_Intervall,<|>,1_Schwelle,<br>,1_Empfaenger,
<|>,1_next_one_time_message,1_now_message,<|>,<bis>,1_hh_Ende,<:>,1_mm_Ende,<|>,
1_next_Intervall,<|>,1_Schwelle_option,<> Tankstelle.*:?alias,
<:>,<SuperE5>,1_SuperE5_aktiv,<SuperE10>,1_SuperE10_aktiv,<Diesel>,1_Diesel_aktiv,
1_msgArt,<|>,<SuperE5>,SuperE5,<->,<SuperE10>,SuperE10,<->,<Diesel>,Diesel,<>
<hr>
Spritmonitor:2_aktiv,<|>,2_one_time_message,<|>,<von>,2_hh_Anfang,<:>,2_mm_Anfang,
<|>,2_Intervall,<|>,2_Schwelle,<br>,2_Empfaenger,<|>,2_next_one_time_message,
2_now_message,<|>,<bis>,2_hh_Ende,<:>,2_mm_Ende,<|>,2_next_Intervall,<|>,
2_Schwelle_option,<> Tankstelle.*:?alias,<:>,<SuperE5>,
2_SuperE5_aktiv,<SuperE10>,2_SuperE10_aktiv,<Diesel>,2_Diesel_aktiv,2_msgArt,<|>,
<SuperE5>,SuperE5,<->,<SuperE10>,SuperE10,<->,<Diesel>,Diesel,<>

Der Eintrag "<hr>" bewirkt eine horizontale weiße Linie zwischen den beiden Alarmen. Wollt ihr also einen dritten Alarm einrichten, einfach <hr> ans Ende anfügen und die Definition entsprechend erweitern. Den Präfix natürlich auf "3_" ändern und die benötigten at-Devices definieren.  

Damit das Eingabefeld nun noch ansprechend aussieht, müssen noch ein paar Attribute gesetzt werden. 

Formatierung der ersten Zeile

Damit die Schrift der ersten Zeile rot und etwas dicker ist, muss das Attribut "cellStyle" gesetzt werden.

attr Sprit cellStyle {"r:1"=>'style="font-weight:bold;;font-size:16px;;color:red"'}​

Die Schriftfarbe kann natürlich angepasst werden.

Eingabefelder zum Leben erwecken

Damit die ganzen Readings auch als Eingabefeld angezeigt werden, muss das Attribut "commands" gesetzt werden. Dies bewirkt, dass nicht der Inhalt der Readings angezeigt wird, sondern, dass man das Readings setzen bzw. veränder kann.

attr Sprit commands {
'1_aktiv.on' => 'setreading $DEVICE 1_aktiv off',
'1_aktiv.off' => 'setreading $DEVICE 1_aktiv on',
'1_Empfaenger' => '1_Empfaenger:waschto,xxxxxxxx',
'1_now_message' => 'setreading $DEVICE 1_now_message 1',
'1_Schwelle' => '1_Schwelle:slider,0,1,10',
'1_Schwelle_option' => '1_Schwelle_option:teurer,günstiger,teurer-günstiger',
'1_hh_Anfang' => '1_hh_Anfang:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23',
'1_mm_Anfang' => '1_mm_Anfang:00,15,30,45',
'1_hh_Ende' => '1_hh_Ende:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23',
'1_mm_Ende' => '1_mm_Ende:00,15,30,45',
'1_Intervall' => '1_Intervall:stündlich,2-stündlich,Änderung',
'1_one_time_message' => '1_one_time_message:keine,morgens,mittags,abends,morgens-mittags-abends',
'1_SuperE5_aktiv.ja' => 'setreading $DEVICE 1_SuperE5_aktiv nein',
'1_SuperE5_aktiv.nein' => 'setreading $DEVICE 1_SuperE5_aktiv ja',
'1_SuperE10_aktiv.ja' => 'setreading $DEVICE 1_SuperE10_aktiv nein',
'1_SuperE10_aktiv.nein' => 'setreading $DEVICE 1_SuperE10_aktiv ja',
'1_Diesel_aktiv.ja' => 'setreading $DEVICE 1_Diesel_aktiv nein',
'1_Diesel_aktiv.nein' => 'setreading $DEVICE 1_Diesel_aktiv ja',
'1_msgArt.minimal' => 'setreading $DEVICE 1_msgArt ausführlich',
'1_msgArt.ausführlich' => 'setreading $DEVICE 1_msgArt minimal',
'2_aktiv.on' => 'setreading $DEVICE 2_aktiv off',
'2_aktiv.off' => 'setreading $DEVICE 2_aktiv on',
'2_Empfaenger' => '2_Empfaenger:waschto,xxxxxxxx',
'2_now_message' => 'setreading $DEVICE 2_now_message 1',
'2_Schwelle' => '2_Schwelle:slider,0,1,10',
'2_Schwelle_option' => '2_Schwelle_option:teurer,günstiger,teurer-günstiger',
'2_hh_Anfang' => '2_hh_Anfang:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23',
'2_mm_Anfang' => '2_mm_Anfang:00,15,30,45',
'2_hh_Ende' => '2_hh_Ende:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23',
'2_mm_Ende' => '2_mm_Ende:00,15,30,45',
'2_Intervall' => '2_Intervall:stündlich,2-stündlich,Änderung',
'2_one_time_message' => '2_one_time_message:keine,morgens,mittags,abends,morgens-mittags-abends',
'2_SuperE5_aktiv.ja' => 'setreading $DEVICE 2_SuperE5_aktiv nein',
'2_SuperE5_aktiv.nein' => 'setreading $DEVICE 2_SuperE5_aktiv ja',
'2_SuperE10_aktiv.ja' => 'setreading $DEVICE 2_SuperE10_aktiv nein',
'2_SuperE10_aktiv.nein' => 'setreading $DEVICE 2_SuperE10_aktiv ja',
'2_Diesel_aktiv.ja' => 'setreading $DEVICE 2_Diesel_aktiv nein',
'2_Diesel_aktiv.nein' => 'setreading $DEVICE 2_Diesel_aktiv ja',
'2_msgArt.minimal' => 'setreading $DEVICE 2_msgArt ausführlich',
'2_msgArt.ausführlich' => 'setreading $DEVICE 2_msgArt minimal'}​

Den Befehl könnt ihr so übernehmen, ihr solltet jedoch den Eintrag "x_Empfaenger" entsprechend anpassen und hier eure Telegram-Benutzernamen einfügen. Des Weiteren könnt ihr die verfügbaren Minuten-Schritt über die Einträge "x_mm_Ende" bzw. "x_mm_Anfang" anpassen. In diesem Fall lässt sich 0, 15, 30 oder 45 Minuten einstellen.

Device-Name entfernen

Damit nicht der Name des Devices in der ersten Spalte angezeigt wird, kann man mit Hilfe des Attributs "mapping" diesen Namen entfernen.

attr Sprit mapping ​&nbsp;

Spaltenbreite anpassen

Da einige Zelleninhalte über mehrere Spalten geht, muss über das Attribut "valueColumns" angegeben werden, welche Zelle über wie viele Spalten geht.

attr Sprit valueColumns {
'Zeitraum' => 'colspan="4"',
'Einmalnachricht' => 'colspan="3"',
'Schwelle (ct)' => 'colspan="6"',
'Intervall' => 'colspan="2"',
'1_Schwelle' => 'colspan="5"',
'2_Schwelle' => 'colspan="5"',
'1_Schwelle_option' => 'colspan="5"',
'2_Schwelle_option' => 'colspan="5"',
'1_Intervall' => 'colspan="2"',
'2_Intervall' => 'colspan="2"',
'1_next_Intervall' => 'colspan="2"',
'2_next_Intervall' => 'colspan="2"',
'1_one_time_message' => 'colspan="3"',
'2_one_time_message' => 'colspan="3"',
'1_next_one_time_message' => 'colspan="2"',
'2_next_one_time_message' => 'colspan="2"',
'1_msgArt' => 'colspan="2"',
'2_msgArt' => 'colspan="2"'}

Format und Einheit der Readings

Die Angabe des aktuellen Spritpreises kann über das Attribut "valueFormat" formatiert werden und mit einer Einheit versehen werden.

attr Sprit valueFormat {
'SuperE5' => "%0.2f €",
'SuperE10' => "%0.2f €",
'Diesel' => "%0.2f €"}

Readings als Icons

Einige Readings, wie die Buttons für die Kraftstoffe oder der Button für die Sofortnachricht werden mit Hilfe von Icons dargestellt. Dies lässt sich über das Attribut "valueIcon" festlegen.

attr Sprit valueIcon {
'1_aktiv.on' => 'rc_GREEN',
'1_aktiv.off' => 'rc_RED',
'2_aktiv.on' => 'rc_GREEN',
'2_aktiv.off' => 'rc_RED',
'1_now_message.0' => 'message_mail',
'1_now_message.1' => 'message_mail',
'2_now_message.0' => 'message_mail',
'2_now_message.1' => 'message_mail',
'1_SuperE5_aktiv.ja' => 'rc_GREEN',
'1_SuperE5_aktiv.nein' => 'rc_RED',
'1_SuperE10_aktiv.ja' => 'rc_GREEN',
'1_SuperE10_aktiv.nein' => 'rc_RED',
'1_Diesel_aktiv.ja' => 'rc_GREEN',
'1_Diesel_aktiv.nein' => 'rc_RED',
'2_SuperE5_aktiv.ja' => 'rc_GREEN',
'2_SuperE5_aktiv.nein' => 'rc_RED',
'2_SuperE10_aktiv.ja' => 'rc_GREEN',
'2_SuperE10_aktiv.nein' => 'rc_RED',
'2_Diesel_aktiv.ja' => 'rc_GREEN',
'2_Diesel_aktiv.nein' => 'rc_RED'}

Günstigster Preis grün einfärben

Bereits aus der ersten Version des Spritpreismonitors bekannt, habe ich das Einfärben des günstigen Preises auch in der zweiten Version implementiert. Die dazugehörigen Subroutine habe ich jedoch etwas optimiert, mehr dazu im Abschnitt "Subroutine". 

Damit das Einfärben auch funktioniert, muss der ReadingsGroup das Attribut "valueStyle" hinzugefügt werden. ​

attr Spritmonitor valueStyle { 
if($READING eq "SuperE5" && $VALUE eq lowestprice("SuperE5")) {
'style="color:green"'}
elsif($READING eq "SuperE10" && $VALUE eq lowestprice("SuperE10")) {
'style="color:green"'}
elsif($READING eq "Diesel" && $VALUE eq lowestprice("Diesel")) {
'style="color:green"'}}

Habt ihr die ganzen Attribute hinzugefügt, sollte der Spritmonitor in etwa so wie auf dem Bild aussehen.

Subroutinen

Damit das schöne Eingabefeld auch funktioniert, sind neben den at-Devices auch ein paar Subroutinen nötig. Damit die Einrichtung aber relativ einfach bleibt und somit auch für FHEM-Neulinge bewerkstellige werden kann, habe ich alle benötigten Subroutinen in eine Datei ausgegliedert. Diese kann dann einfach hier auf meinem Blog heruntergeladen und in FHEM eingebunden werden, ohne Anpassungen vornehmen zu müssen.

Dazu einfach die Datei herunterladen, entpacken und die Datei "99_SpritalarmUtils.pm" in den FHEM-Installationsorder in den Unterordner FHEM​ kopieren. Anschließend FHEM neu starten oder das Modul durch folgenden Befehl laden:

reload ​99_SpritalarmUtils

Alternativ könnt ihr in FHEM über "Edit files" mit Hilfe der Datei "myUtilsTemplate.pm" eine eigene Datei mit dem Namen "99_SpritalarmUtils.pm" anlegen und den Inhalt aus meiner Datei einfügen. 

Ich habe versucht die Codezeilen ausreichend zu kommentieren, damit jeder diesen nachvollziehen kann. Wer also mehr zu den Routinen wissen möchte, der kann sich den Code etwas genauer ansehen. 

In der Datei befindet sich ebenfalls eine Kopiervorlage für die ganzen Devices. Hiermit lassen sich Kopierfehler aufgrund Formatierungen umgehen. 

setONOFF($)

Diese Routine aktiviert bzw. deaktiviert den Spritalarm.

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - setONOFF("1")

callRoutine($)

Wird von den at-Devices aufgerufen und ruft dann je nach ausgelöstem Reading die entsprechende Subroutine auf.

Übergabewert: Reading welches das Event ausgelöst hat --> z.B. callRoutine("$EVTPART0")

create_message( $)

Erstellt den Inhalt der Nachricht. Dabei wird anhand dem letzten gesendeten Wert und der eingestellten Schwelle überprüft ob diese unter- bzw. überschritten wurde. Je nachdem wird dann der Inhalt der Nachricht zusammen gesetzt. 

In dieser Routine wird ebenfalls überprüft ob es sich um eine Sofortnachricht bzw. eine Einmalnachricht handelt und die Schwelle dementsprechend deaktiviert werden soll.​

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - create_message("1")

Tankstatistik ($$$$)

Diese Routine erstellt anhand des aktuellen Kraftstoffpreises und der statistischen Werten eine Bewertung des aktuellen Kraftstoffpreises.

Je nach eingestellter Nachrichtenart wird die Auswertung des Preises entsprechend ausgearbeitet. ​

Übergabewert: Tankstelle, Kraftstoff, Nummer des Spritalarm--> z.B. Tankstatistik("TankstelleARAL,SuperE10,1")

checkSchwelle ($$$)

In dieser Routine wird anhand des aktuellen Kraftstoffpreises und der des zuletzt gesendeten Preises überprüft, ob die Schwelle je nach Option über- bzw. unterschritten wurde. Ist dies der Fall, wird dies entsprechend über das Reading "x_KRAFTSTOFF_Schwelle_status" signalisiert. 

Übergabewert: Tankstelle, Kraftstoff, Nummer des Spritalarm--> z.B. checkSchwelle("TankstelleARAL,SuperE10,1")

setZeitraum ($)

Diese Routine wird aufgerufen, wenn der Zeitraum geändert wird. Sie bewirkt, dass die entsprechenden at-Devices entsprechend angepasst werden.

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - setZeitraum("1")

nextIntervall ($)

Diese Routine wird aufgerufen, wenn eine Intervallnachricht gesendet werden soll. Sie leitet das Erstellen der Nachricht ein und versendet diese dann. Zusätzlich wird abhängig von der Intervalleinstellung (stündlich, 2-stündlich) und der Zeitraumeinstellung der nächste Zeitpunkt gesetzt, zu der die nächste Nachricht gesendet werden soll.

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - nextIntervall("1")

sendNow ($)

Diese Routine bewirkt das Senden einer Sofortnachricht. Unabhängig vom eingestellten Zeitraum oder Intervall. Sie wird für die Sofortnachricht verwendet, welche über das Briefsymbol gesendet werden kann.

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - sendNow("1")

setOneTime ($)

Diese Routine kümmert sich um die Einmalnachrichten zu den eingestellten Zeiten (morgens, mittags, abends). Hier wird das entsprechende at-Device auf die gewünschte Zeit eingestellt und die Ausgabe für das Eingabefeld gesetzt. 

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - setOneTime("1")

sendAenderung ($)

Diese Routine kümmert sich um das Senden der Intervallnachrichten, wenn als Option "Änderung" eingestellt ist. 

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - sendAenderung("1")

sendOneTime ($)

Diese Routine ist für die Einmalnachricht verantwortlich. Sie wird zu den definierten Zeitpunkten (7,12,18 Uhr) aufgerufen und sendet unabhängig von der Schwelle eine Nachricht. 

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - sendOneTime("1")

offIntervall ($)

Diese Routine wird beim Ende des Zeitraumes aufgerufen und deaktiviert die Intervallnachrichten.

Übergabewert: Nummer des Spritalarm --> z.B. "1" oder "2" - offIntervall("1")

lowestprice ($)

Die Routine lowestprice($) ermittelt den günstigen Preis eines Kraftstoffes und gibt diesen zurück. Dies dient der EInfräbung des Preises in der ReadingsGroup. 

Übergabewert: Kraftstoff --> z.B. "SuperE5" oder "SuperE10" - lowestprice("SuperE5")

Ausblick

Dieser Spritpreismonitor wurde von mir mehrere Wochen getestet und überprüft. Die Subroutinen sind jedoch vielleicht nicht perfekt programmiert (bezüglich Wiederholungen von Code etc.). Durch Fehlerverbesserungen und Umstrukturierung der Routinen haben sich bestimmt einige "sinnlose" Passagen in den Code geschlichen. Er sollte aber nun erstmal ordnungsgemäß funktionieren. Solltet ihr dennoch Fehler finden, würde ich mich freuen, wenn ihr mir diese mitteilen könntet. Mehrere Augen sehen ja bekanntlich mehr.  Ich werde  dieses Projekt natürlich weiter verfolgen und ggf. weitere Versionen bzw. Updates rausbringen bzw. den Code bezüglich der Größe etwas verbessern. Versionsnummern 2.x werden sich jedoch ausschließlich auf Fehlerverbesserungen konzentrieren. Wollt ihr diesbezüglich auf dem Laufenden bleiben, so abonniert einfach diesen Beitrag und ihr werden informiert, sobald ich in den Kommentaren ein Update ankündige. 

Habt ihr weitere Ideen bzw. Wünsche nach weiteren Funktionen, dann lasst mich dies über ein Kommentar wissen. Ich werde dann versuchen diese in der Version 3.0 einzubauen.

Ein weiters Ziel von mir ist es, diesen Spritalarm in ein eigenes Modul zu stecken und somit die Definition und die Einrichtung zu erleichtern. Dafür muss ich mich jedoch noch etwas in das Thema "Modulerstellung" einarbeiten.

Hinterlasse einen Kommentar

41 Kommentare auf "Spritpreismonitor 2.0 – Individualisierter Tankalarm"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
Sille
Gast
Sille

Hi Daniel,

danke für den tollen Tankalarm! Den habe ich gleich bei mir eingebaut.
Bei den „Sprit commands“ hat sich ein kleiner Fehler eingeschlichen: Es fehlt das Hochkomma nach ‚1_aktiv.off

attr Sprit commands {
‚1_aktiv.on‘ => ’setreading $DEVICE 1_aktiv off‘,
‚1_aktiv.off => ’setreading $DEVICE 1_aktiv on‘,

LG Sille

Daniel
Gast
Daniel

Hallo Daniel,
ich habe es auch umgesetzt. Funktioniert soweit ganz gut, jedoch beachtet er nicht die Endezeit, sodaß ich auch nachts weiter Nachrichten bekomme. Setze ich das Reading manuell auf inactive funktioniert es und morgens wird es automatisch auf active gesetzt.
Suche schon seit Stunden den Fehler bei mir 🙂

Danke für die tolle Erweiterung des Spritalarms.

Gruß Daniel

Stephan
Gast
Stephan

Hi Daniel,
erst mal ein RIESEN Dank für deinen Sprintalarm 🙂 Echt eine Super Sache 🙂
ich hätte einen Verbesserungsvorschlag für 3.0
Viele Menschen Tanken ja bestimmt vor oder nach der Arbeit, wäre cool wenn man einstellen könnte dass zu bestimmten Zeiten (vor der Arbeit nach der Arbeit) überprüft wird wie der Preis ist und dann aufsteigend nach Preis sortiert eine Nachricht verschickt wird. Quasi eine Einstellung fester Zeiten, weil ich habe eh nur Tankstellen aufgenommen die sich bei mir auf dem Arbeitsweg befinden.

Irgendwie fehlt mir bei dem 2.0er der Vergleich zu den Durchschnittspreisen oder habe ich da was vergessen?
Gruß

Robert
Gast

Grandiose Arbeit
Vielen Dank dafür
Werde mir demnächst mal Zeit nehmen und mir das einrichten

Sami
Gast
Sami

Hallo Daniel,

erstmal vielen Dank für diese tolle Arbeit!

Ich habe noch einen kleinen Verbesserungsvorschlag:

Die Spritpreise sind in der Regel 0,9 Cent teurer als die HTTPMOD-Erfassung über Regex.

Deswegen habe ich die Tankstellen-Devices wie folgt ergänzt:
z.B. attr Tankstelle_Aral reading01OExpr $val + 0.01 (Ich habe hier auf 1 Cent aufgerundet)

LG

Sami

Victor
Gast
Victor

Nun wollte ich die Tabelle aus der 1. Version updaten,
komme aber nur bis zu
define 1_nextIntervall at *12:00 {nextIntervall(„1“)}​
und erhalte die Fehlermeldung:
Unrecognized character xE2; marked by <– HERE after vall("1")}<– HERE near column 36 at (eval 157) line 1.
Ist da ein Problem in der 99_SpritalarmUtils.pm, die ich in /opt/fhem/FHEM kopiert habe und mit 0777 dialout fhem versehen habe?

Sven
Gast
Sven

HUHU

Ich habe mir gerade deine neue Version angeschaut und wollte das nun umsetzten
Leider bekomme ich beim folgenden Code ein fehler:
define 1_oneTime at ​*12:00 {sendOneTime("1")}

Fehler:
Wrong timespec ​*12:00: either HH:MM:SS or {perlcode}

Habe es schon mit define 1_oneTime at ​*12:00:00 {sendOneTime("1")} versuche klappt auch nicht gleicher fehler
Hoffe du kannst mir helfen

Gruß

Sven
Gast
Sven

Ok, das habe ich nun selbst erledigt
Da sind Formatierungsfehler (versteckte zeichen), einfach in einen Editor eingeben und dann in die FHEM Zeile kopieren

Jetzt habe ich aber probleme define Sprit readingsGroup
Siehe bild, irgendwie passt da noch was nicht …

sprit.jpg
Sven
Gast
Sven

ok hat sich erledigt funktioniert
Die Zeilumbrüche haben Probleme bereitet beim kopieren
ich muss sagen, super arbeit sieht echt top aus, jetzt muss das nur noch mit Telegram funktionieren

Gruß

sprit.jpg
Sven
Gast
Sven

hey
ja ich habe mir gedacht ich schreib dir mal eine rückmeldung das es doch funktioniert, so wissen andere Personen gleich wo der fehler sein könnte (wenn man die Kommentrae liest 😉 )

Ich habe mein TelegramBot teleBot genannt, da liegt wohl jetzt gerade das Problem, denk ich mal …

Gruß

Sven
Gast
Sven

hey

ja das hatte ich bereits geändert
So nach Längeren hin und her habe ich es jetzt hinbekommen, komischerweise war bei diesem skript der Falsche Telegram Username eingetragen, das es da auch so viele möglichkeiten gibt man o man 😉

Funktioniert wunderbar, nun ein wenig mit den Einstellungen rumspielen
Und mal sehen, wie ich das auf die Tablet-UI bekomme um es an meiner Wand einzustellen 😉

IMG_20170811_150606.jpg
Basti
Gast
Basti

Wäre die Implementierung durch „msg“ nicht noch interessant ?

Thomas
Gast
Thomas
Hi Daniel, der Spritpreismonitor 2.0.1 ist ganz großes Kino 😉 Auch ich habe mir den gerade ins FHEM gebastelt. Dabei ist mir aufgefallen, dass sich hier noch zwei Fehler eingeschlichen haben: setreading Spritmonitor 1 speicherWert ja setreading Spritmonitor 1 statusOneTime nein Hier fehlen die Unterstriche im Text 😉 setreading Spritmonitor 1_speicherWert ja setreading Spritmonitor 1_statusOneTime nein Auch ich bin im übrigen über die „Umbruch“-Problematik gestolpert und dachte mir, dass es vielleicht für alle weiteren „Nachbastler“ schön wäre, eine reine Text Datei mit in das 99_SpritalarmUtils.pm_.zip mit rein zupacken, das man eh herunterladen muss. Dann hätte man gleich eine Kopiervorlage… Ich… weiterlesen »
Jens
Gast
Jens

Moinsen Daniel,
nach anfänglichen Schwierigkeiten hat das Einbinden geklappt. (Die Kopiervorlage enthält tw. merkwürdige Sonderzeichen). Auch der TelegramBot läuft jetzt problemlos. Danke dafür!
Was ich jetzt noch vermisse ist ein GPlot über die Preisentwicklung. Ich habe noch nie einen GPlot in FHEM integriert, sondern nur gesehen, dass es anhand eine .log files recht einfach machbar sein sollte.
Nun frage ich mich, ob der Spritmonitor schon ein solches log erstellt, was ich dafür benutzen könnte ?

Totti
Gast
Totti
Hi Daniel, vorab auch von mir ein großes Lob für deine Arbeit ! Man merkt wieviel Arbeit dahinter steckt und ich muss sagen absolut gelungen. Hoffentlich wird irgendwann nen Modul draus 😉 Ich habe es jedenfalls nach etwas längerem hin und her zum laufen bekommen. (Hatte ein Paar Probleme mit dem Kopieren mancher Befehle, irgendwie hat das bei manchen nicht geklappt. Ab ungut, so schwer es dann selbst einzutippen ist es ja dann auch nicht 😉 Und Telegram zum laufen zu bekommen war auch etwas umständlich. Musste erstmal meinen Namen beim Bot ändern (Im Benutzernamen durfte nicht der Anmeldename/echtname vorkommen),… weiterlesen »
Timo
Gast
Timo
Hallo Daniel, super Arbeit – vielen Dank dafür. Ich musste mich ein wenig durch die Einrichtung kämpfen, aber hat schlussendlich geklappt und ich hab wieder was über FHEM gelernt! Der Spritmonitor macht auch das was es soll – bis auf eine kleine Ausnahme: Das Intervall funktioniert nur ab 10:00 Uhr und dann fehlerfrei (Eingestellt auf 6-22 Uhr). Geht es über den Tageswechsel, wird auch die erste Nachricht um 6 Uhr gesendet, dann aber wird das Intervall deaktiviert. Hier hatte ich schon die Vermutung, dass es mit der Zeitdefinition der einstelligen Stunden zusammenhängt, denn liegt das nächste Intervall über 09:59 also… weiterlesen »
wpDiscuz