belzetrigger / domoticz-BSR

Domoticz plugin that gets data of public waste collection for Berlin from BSR
MIT License
0 stars 1 forks source link

Meldung im Protokoll #1

Closed schurgan closed 1 year ago

schurgan commented 3 years ago

Domoticz Version: 2021.1 Python Version: 3.7.3

Hallo, ich hoffe es ist ok wenn ich hier auf deutsch schreibe. Ich habe ein kleines Problem.

  1. Im Protokoll kommt alle 10 Sekunden eine Meldung: "(BSR) bs4: <module 'bs4' from '/usr/local/lib/python3.7/dist-packages/bs4/init.py'>" Ist zwar nichts schlimmes bestimmt, macht nur Logfenster unüberschauber.
  2. Wie kann ich den Alarm in Blockly nutzen? Ich finde keinen Auslöser dafür. Für deine Unterstützung wäre ich sehr dankbar.
belzetrigger commented 3 years ago

zu 1) Ich habe die Ausgabe jetzt auf Debug umgestellt, da gehört sie auch hin. Sprich sofern du in der Konfiguration nicht den Debug mode an hast, sollte diese Ausgabe nicht mehr auftauchen

2) Mit Blockly habe ich mich noch nicht wirklich befasst. Schreibe dann doch eher schnell ein Python-Skript. Aber die Alert-Devices findest Du unter Utility. Wenn man Glück hat sollte man dann einfach gegen den nValue prüfen können.
Hier die Alarmlevel

Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
 if delta.days <= 1:
            level = 4
        elif delta.days == 2:
            level = 3
        elif delta.days == 3:
            level = 2
        else:
            level = 0

Ansonsten bleibt nur ein Prüfen gegen den Text. Hier der Text der gesetzt wird

 if delta.days == 2:
            smallerTxt = '{} ({})'.format(smallerTxt, "Übermorgen")
        elif delta.days == 1:
            smallerTxt = '{} ({}!)'.format(smallerTxt, "Morgen")
        elif delta.days == 0:
            smallerTxt = '{} ({}!!!)'.format(smallerTxt, "Heute")
        else:

Für E-Mail, Telegram oder Signal gibt es auch andere Möglichkeiten.

schurgan commented 3 years ago

Danke, zu 1. Jetzt ist die Meldung raus, danke, großartig

zu 2. Level Abfrage funktioniert nicht, ich habe mit allen möglichen Blockly Bausteinen versucht, geht nicht. Auf Text zu prüfen geht auch nicht, warum auch immer. Kann man vielleicht anstatt Typ Alert lieber Selector Switch machen mit einsprechenden Werten. So ein Gerät ist ja einfacher abzufragen. Wie machst du die Abfrage, oder schaust du einfach hin, ohne benachrichtigt zu werden?

belzetrigger commented 3 years ago

Bei der Ansicht 'Zähler' beim jeweiligen Geräte Benachrichtigungen auswählen. Und dann z. B. folgendes einstellen: grafik

Für E-Mail muss vorher in den Einrichtung > Einstellungen > E-Mail hinterlegt werden. Dazu habe ich dann noch Signal laufen.

schurgan commented 3 years ago

Das habe ich noch nicht getestet. Ich lasse mir auch vieles von Alexa sagen bzw. mich an etwas erinnern mit hilfe eines Skripts. Bei dieser Variante mit "Benachrichtigungen" geht es leider nicht.

belzetrigger commented 3 years ago

Gibt es im Blockly ggf. auch die Möglichkeit "Einsatz" abzufragen?

schurgan commented 3 years ago

Keine Ahnung, wie meinst du das mit dem Einsatz. Ich hab dort auf jeden Fall alles durchgetestet und konnte mit keinem "if" Baustein einen "do set =" auslösen lassen. Man kann ja bei Blokly nur mit einem "do set =" Baustein ein Skript starten.

belzetrigger commented 3 years ago

Müsste es dann nicht in etwa so gehen - sprich als Wert einfach eine Zahl ohne "". grafik

schurgan commented 3 years ago

Nein, geht leider nicht.

belzetrigger commented 3 years ago

Kommisch. Ich bekomme mit der o.g. Einstellung jetzt eine E-Mail, wenn die Bedingung erfüllt ist, sonst nicht. Der allgemeine Auslöser ist Einrichtungen > Einstellungen > Benachrichtigung nach unten scrollen und dort bei Sensoren das gewünschte Intervall einstellen. Sollte dann eher bei 1min oder so liegen. grafik

Ansonsten würde ich vorschlagen, erstmal E-Mail-Benachrichtigung einstellen und wenn es dann passt ein weiteres Skript für Alexa. Du kannst gerne auch mal Dein Blocky teilen.

Ich kann auch noch gerne mal eine API Aufruf bereitstellen, um den BSR Alarm-Sensor hin und her zuschalten.

schurgan commented 3 years ago

Warum machst du größer 2, soll es nicht bei grau gleich 0 sein? Vielleicht ist das ein Verständnisproblem von mir?

schurgan commented 3 years ago

Jetzt geht es plötzlich, keine Ahnung woran das lag. Ich teste das ganze bis Mittwoch (an dem Tag wird Müll abgeholt), und lass mich dann jeden Tag benachrichtigen und gebe dir dann bescheid. Danke

schurgan commented 3 years ago

Also 3 würde dann für übermorgen und 4 für morgen stehen? Unbenannt

belzetrigger commented 3 years ago

Genau. Die 4 schließt aber "heute" noch mit ein. Damit ich morgens noch ne Chance habe :) Um 12.oo geht das Plugin dann auf den nächsten Termin.

schurgan commented 3 years ago

Sehr schön, danke dir.

schurgan commented 3 years ago

Also bis jetzt kein Erfolg bei der Abfrage. Im Protokoll, nach jedem Aktualisieren/Neustarten vom Plugin, habe ich folgendes entdeckt:

2021-04-27 14:02:13.741 BSR: (BSR) BLZ: Updated to: 28.04.2021 Wed: Hausmüll 2021-04-27 14:02:13.741 05.05.2021 Wed: Wertstoffe (Abholung durch ALBA) 2021-04-27 14:02:13.741 value: 4

Obwohl value: 4 dort zu sehen ist, reagiert mein Blokly Skript darauf nicht. Komisch finde ich dass der Wert ohne Angabe zur Zugehörigkeit zu einem Plugin oder sonst was da ist, also Datum Zeit und halt der Wert. Vielleicht ist das das Problem? Außerdem würde value: 4 auch nicht zu "Übermorgen" passen, oder?

belzetrigger commented 3 years ago

Schade. Um die Zeile 370 in Plugin.py findest Du Domoticz.Log("BLZ: Updated to: {} value: {}".format(alarmData, alarmLevel)) Ich vermute, dass alarmData eine Zeilenumbruch oder so enthält und es deswegen so komisch im Log aussieht.

Kannst Du in Deinem Blocky-Skript noch ein Debug:Write to Log einbauen. Sollte dann als Status im Log auftauche. Bei mir wird das Blocky übrigns durch ein Update des Devices getriggert, und nicht wie ich erst annahme via Einstellungen. Sprich einfach Hardware /Plugin Aktualisieren und dann wird das Blocky angestoßen.

Bei mir funktioniert übrings nur das einfach If (nicht das mit dem Zahnrad) zuverläßig. Siehe unten grafik

schurgan commented 3 years ago

Geht nicht, keine Ahnung was ich noch machen kann. Warum machst du > 4. Soll es nicht = 4 heißen? Bei >4 kommt die Meldung, zumindest heute, also Müllabfuhr ist morgen. Gerade getestet, bei >5 kommt die auch. Sehr komisch

belzetrigger commented 3 years ago

Wo genau mache ich >4? In meinen Test-Skript war es > 2. War oben aber abgeschnitten. Ansonsten nutze ich >= 3 btw: via http:/<host:8080>/json.htm?type=devices&rid=<index> werden die Details angezeigt. Sprich wenn morgen der Müll abgeholt wird, sollte dort bei Level 4 stehen.

belzetrigger commented 3 years ago

Ich habe mir einen neuen Eintrag angelegt, der auch morgen abgeholt wird. An dem hängen keine weiteren Benachrichtigungen. Bei Aktualisierung via Hardware-Menü erscheinen folgende Einträge im Log - EventSystem: Event triggered: test blocky_1

2021-04-27 19:26:08.268 (Müll) BLZ: Updated to: 28.04.2021 Wed: Hausmüll
2021-04-27 19:26:08.268 value: 4
2021-04-27 19:26:08.268 (Müll) next poll: 2021-04-27 20:26:06.915161
2021-04-27 19:26:08.268 (Müll) ----------------------------------------------------
2021-04-27 19:26:08.255 Status: Achtung wert uberschritten
2021-04-27 19:26:10.823 Status: Notification sent (Email) 

Zu dem habe ich testweise bei mir im Plugin.py die Beschränkung auf 6 Stunden rausgenommen, um jetzte alle Stunden ein Update auszuführen. Wobei ich mir nicht sicher bin, ob ich jedes mal ein Update mache, wenn der Wert sich nicht ändert?!

Test Skript bei mir: grafik

schurgan commented 3 years ago

Naja, vielleicht >2 oder >3. Mir geht es um das Zeichen und nicht um die Zahl. Mache doch = Zeichen und du wirst sehen, es kommt keine Meldung

belzetrigger commented 3 years ago

Der Alarmlevel steigt mit Abnahme der Tage bis zur Leerung. Ich will ab Level 3, Sprich zwei Tage davor aka 'Wenn Leerung Übermorgen' informiert werden. Damit habe ich dann auch die 4 sprich "Leerung Morgen" und "Leerung heute" mit abgedeckt. Wenn meine Versuchsreihe durch ist, stelle ich es auch gerne mal auf = 4 um und Prüfe ob was passiert.

Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
      if delta.days <= 1:
           level = 4
       elif delta.days == 2:
           level = 3
       elif delta.days == 3:
           level = 2
       else:
           level = 0
schurgan commented 3 years ago

Ok, mache bitte testweise größer 5 (darf ja keine Meldung kommen) und schau was passiert, die Meldung kommt bestimmt wieder.

belzetrigger commented 3 years ago

Zwischenergebnis:

Also ich glaube mit Blocky kommt man derzeit nicht weit. Alles was ich gefunden hatte, macht dann den Umweg über benutzerdefinierte Variablen. Ist aber auch nicht schön.

Alternative wäre unter Einrichtung > Einstellungen > Benachrichtigung eine Benutzerdefinierte Aktion anzulegen. Da kannst du auch dein Alexa-Skript hinterlegen script:///home/domoticz/domoticz/plugins/domoticz-Alexa.sh -d Wohnzimmer -e speak:"#MESSAGE"

Und dann bei dem Gerät die Benachrichtigung allgemein einschalten, http aktivieren und den gewünschten Text eingeben. Es gibt auch einige Parameter wie $name und glaube $value die dann in der Message einbetten kannst z. B. Bitte daran denken $name . Ergebniss sollte dann "Bitte daran denken: Hausmüll (Morgen)" sein.

schurgan commented 3 years ago

Danke, ich teste das heute abend

belzetrigger commented 3 years ago

Ich habe jetzt eine neue Version bereitgestellt. Mit Blocky bin ich nicht weiter gekommen. Als alternative für die allgemeine Benachrichtigung unten noch dzEvent-Script. In Zeile 17 IDX mit dem echten Index ersetzen.

Ich würde den Issue sonst schließen.

return {
    on = {
        timer = 
        {
            'at 09:34',
            'at 19:00',
        },
    },

    logging =
    {
        level = domoticz.LOG_DEBUG, -- set to domoticz.LOG_ERROR when OK
        marker = 'BSR',
    },

    execute = function(dz)
        local bsr = dz.devices(IDX) --- replace with index of bsr device
        local nValue = bsr.nValue

        --dz.log(bsr.name .. ' measures a alarm level ' .. nValue .. ' ',dz.LOG_ERROR)

        if nValue >= 3 then 
            dz.notify('BSR', 'Muell wird faellig',dz.PRIORITY_NORMAL)
            --dz.email('BSR' .. bsr.name, 'Muell ...' .. bsr.name, 'you@fooo.bar')
        else
            dz.log('BSR: noch Zeit (' .. nValue .. ') ',dz.LOG_DEBUG)
        end    
    end
}
schurgan commented 3 years ago

Hallo, vielen Dank für deine Arbeit. Ich bin immer noch nicht zum Testen gekommen, hab zurzeit viel um die Ohren. Werde aber irgend wann das vornehmen. Danke noch Mal...

belzetrigger commented 1 year ago

Anbei noch eine Alternative die direkt mit dem Status Orange,Red arbeitet und nicht mit 1,..5. XXX muss mit dem echten device index ergänzt werden.

Ansonsten würde ich das Alexa Skript bei Domoticz unter Einstellung > Benachrichtigung > Benutzerdefiniertes HTTP/Aktion hinterlegen. Dann kann jede Benachrichtigung / Überwachung davon profitieren.

`return { on = { timer = {'at 21:57'}, }, data = {}, logging = {}, execute = function(domoticz, item) if item.isTimer then domoticz.log('BLZ: Muell checking ', domoticz.LOG_INFO) dv=domoticz.devices(XXX) if dv.nValue == domoticz.ALERTLEVEL_ORANGE then domoticz.notify('Muell', 'An den Muell denken' .. dv.text, domoticz.PRIORITY_EMERGENCY) elseif dv.nValue == domoticz.ALERTLEVEL_RED then domoticz.notify('Muell', 'Dringend an den Muell denken' .. dv.text, domoticz.PRIORITY_EMERGENCY) else domoticz.log('BLZ: Muell is nt red ' .. dv.nValue, domoticz.LOG_INFO) end end

end

} `