Gå til innhold
  • Bli medlem

SCRIPT: CheckForUnknown.vb - Finner enheter som er satt til "Unknown" og poller dem


Moskus
 Del

Anbefalte innlegg

Det hender jeg eksperimenterer med Z-wave, til og med på hovedsystemet. Jeg har et par Z-wave-interfacer jeg bytter mellom (kjører restore av backup til et nytt interface før for mye testing), og det fjerner all potensiell routing-informasjon. I løpet av de første timene prøver altså huset å "finne seg selv", alt går litt tregt, og det blir høyere risiko for at noe er satt til "Unknown".

 

Jeg skrev et script for å finne disse enhetene, og så polle dem for å faktisk lese statusen de har. Det hjelper både for å få fjernet de irriterende "Unknown"-status'ene, og det hjelper på å bedre routingen fordi kommandoen blir utført.

 

For at dette skal fungere ut av esken må HomeSeer finne seg selv på localholst på port 80. Hvis ikke må du endre "Dim url as String"-linja.

 

CheckForUnknown.vb

Public Sub Main(ByVal params As Object)
        'Moskus 2020
        Dim subStart As DateTime = DateTime.UtcNow

        Dim url As String = "http://localhost/json?request=getstatus"
        Dim json As String = ""
        Dim DEBUG As Boolean = False
        If DEBUG Then hs.WriteLog("CheckForErrors", "Downloading data... ")
        Using client As New System.Net.WebClient
            json = client.DownloadString(url)
            json = json.ToLower()
        End Using
        If DEBUG Then hs.WriteLog("CheckForErrors", "Download done!")

        Dim searchString As String = ("{""ref"":").ToLower()
        Dim errorSearchString As String = ("""status"":""Unknown"",""device_type_string"":""Z-Wave Switch").ToLower()

        Dim lst As New System.Collections.Generic.List(Of Integer)
        Dim start As Integer = 0
        If json.IndexOf(errorSearchString) > 0 Then ' Yes, we have errors, lets find the devices by looping through all devices
            While start <> -1
                Dim deviceJsonStart As Integer = json.IndexOf(searchString, start)
                If deviceJsonStart = -1 Then Exit While
                Dim deviceJsonEnd As Integer = json.IndexOf(searchString, deviceJsonStart + searchString.Length)
                If deviceJsonEnd = -1 Then Exit While

                Dim deviceJson As String = json.Substring(deviceJsonStart, deviceJsonEnd - deviceJsonStart) 'This is the JSON for a device

                If deviceJson.Contains(errorSearchString) Then 'Check if the device contains the error and get the deviceRef if it doesn't
                    Dim deviceRef As Integer = deviceJson.Substring(searchString.Length, deviceJson.IndexOf(",") - searchString.Length)
                    lst.Add(deviceRef)
                    If DEBUG Then hs.WriteLog("CheckForErrors", "Found reference '" + deviceRef.ToString + "'")
                End If

                start = json.IndexOf(searchString, deviceJsonStart + 10)
            End While
        End If


        For Each d As Integer In lst
            Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d)
            Dim devName As String = dev.Location2(hs) & ", " & dev.Location(hs) & ", " & dev.Name(hs)
            Dim pollResult As HomeSeerAPI.IPlugInAPI.PollResultInfo = hs.PluginFunction("Z-Wave", "", "PollDevice", New Object() {d})
            hs.WriteLog("CheckForErrors", "Poll of device " & d.ToString & " (" & devName & ") returned " & pollResult.Result.ToString & " (" & pollResult.Value & ")")

            'Check if the device has the correct value
            If pollResult.Result = HomeSeerAPI.IPlugInAPI.enumPollResult.OK OrElse pollResult.Result = HomeSeerAPI.IPlugInAPI.enumPollResult.Timeout_OK Then
                Dim pollValue As Integer = pollResult.Value
                Dim devValue As Integer = hs.DeviceValue(d)

                'Set the device to the correct value
                If devValue <> pollValue Then
                    For Each CAPI As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d)
                        If CAPI.ControlValue = devValue Then
                            Dim response As CAPIControlResponse = hs.CAPIControlHandler(CAPI)
                            hs.WriteLog("CheckForErrors", "Set " & d.ToString & " (" & devName & ") to " & CAPI.Label & ": " & response.ToString)

                            Exit For
                        End If
                    Next
                End If
            End If
        Next

        hs.WriteLog("CheckForErrors", "Done! Elapsed time: " & Math.Round(DateTime.UtcNow.Subtract(subStart).TotalSeconds, 2) & " seconds")
    End Sub

 

 

image.png

 

Jeg kjører dette scriptet i et event hver 10. minutt. Men jeg har også en begrensning på at det ikke må ha vært bevegelse i huset i løpet av 5 minutter for å redusere trafikken når routingen er på det verste.

 

Jeg hadde selvfølgelig tenkt å disable scriptet når det ikke var behov for det, men ellers merker jeg ikke noe til det for det er særdeles sjeldent scriptet finner "Unknown" lenger, det ser jeg jo nå i loggen.

  • Like 4
Lenke til kommentar
Del på andre sider

  • 2 uker senere...
  • 5 uker senere...
On 07/08/2021 at 09:01, Moskus said:

Jeg skrev et script for å finne disse enhetene, og så polle dem for å faktisk lese statusen de har. Det hjelper både for å få fjernet de irriterende "Unknown"-status'ene, og det hjelper på å bedre routingen fordi kommandoen blir utført.

 

Jeg har implementert dette scriptet og kjørt det hver natt. Tenkte det holdt. Det viser seg imidlertid at det - etter å ha kjørt noen uker - hadde en uønsket sideffekt. Jeg har vifter som styres med PWM (Qubino). Disse har både kontrollene on/off - og mulighet for å kontrollere hastighet fra 0 til 100%. Devicen med on/off fikk status som unknown. Effekten av dette er at scriptet korrigerte denne til "on" - som fører til at viften kjører på 100% - som er rimelig heftig luftstrøm og støy. Vet ikke hvorfor akkurat denne devicen fikk status som unknown. Devicene er jo også litt ulogiske siden man typisk styrer farten til å være noe mellom off og on...

Ingen stor praktisk krise, har foreløpig slått av den eventen som kjører scriptet, men tenkte jeg skulle gi beskjed til @Moskus

 

sep-16 04:14:26	 	CheckForErrors	Set 2376 (1.etasje, WC, bryter vifte) to On: All_Success
sep-16 04:14:26	 	Device Control	Device: 1.etasje WC bryter vifte to On (255) by/from: CAPI Control Handler
sep-16 04:14:26	 	CheckForErrors	Poll of device 2376 (1.etasje, WC, bryter vifte) returned OK (254)

 

Lenke til kommentar
Del på andre sider

2 hours ago, Gizmo said:

Effekten av dette er at scriptet korrigerte denne til "on"

Hvis den er "unknown" så polles enheten. Hvis pollet verdi er ulik device-verdien, så trigges device-verdien på ny.

 

Du kan fjerne dette ved å kommentere ut eller fjerne denne linja:

Dim response As CAPIControlResponse = hs.CAPIControlHandler(CAPI)

 

  • Thanks 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

 Del

  • Lignende innhold

    • Av Join
      Hei!
       
      Utvikleren til Device History plugin-et har vore meget serviceinnstilt og levert kode for å hente ut gjennomsnittsverdi frå sist time og skrive verdien til et virtuellt device.
       
      På denne måten kan eg sammenligne direkte med en verdi, istedenfor å gjennomsnittsberegne for kvar enkelt funksjon.
       
      Koden er som følger:
       
       
      Public Sub UpdateHourlyStats(parms As String)
      Dim intSourceRef As Integer Dim intDestRef As Integer Dim dtmFrom As Date Dim dtmTo As Date Dim strDeviceStats As String Dim astrStats() As String Const IDX_STATS_MIN As Integer = 0 Const IDX_STATS_MAX As Integer = 1 Const IDX_STATS_AVG As Integer = 2 Const IDX_STATS_COUNT As Integer = 3 Dim dblMin As Double Dim dblMax As Double Dim dblAvg As Double Dim intCount As Integer 'figure out the parameters intSourceRef = CType(parms.Split(";")(0), Integer) intDestRef = CType(parms.Split(";")(1), Integer) dtmTo = Date.Now dtmFrom = dtmTo.AddHours(-1) hs.WriteLog("Device History", "Getting updated stats for device " & intSourceRef & " from '" & dtmFrom.ToString() & "' to '" & dtmTo.ToString() & "' ...") 'Ask the plugin for the stats strDeviceStats = hs.PluginFunction("Device History", "", "GetRangeStats", {intSourceRef.ToString(), dtmFrom.ToString(), dtmTo.ToString()}) 'Parse the response into discrete variables astrStats = strDeviceStats.Split("|") If astrStats.Length() = 4 Then
      dblMin = astrStats(IDX_STATS_MIN) dblMax = astrStats(IDX_STATS_MAX) dblAvg = astrStats(IDX_STATS_AVG) intCount = astrStats(IDX_STATS_COUNT) 'Do something with the output hs.WriteLog("Device History", "Device " & intSourceRef & " ranged from " & dblMin & " to " & dblMax & ", with an average value of " & dblAvg & " taken from " & intCount & " changes.") hs.WriteLog("Device History", "Updating device " & intDestRef & " with value " & dblAvg) hs.SetDeviceValueByRef(intDestRef, dblAvg, True)
      Else
      hs.WriteLog("Error", "Retrieval of stats for device " & intSourceRef & " failed.")
      End If
      End Sub
       
      Korleis lagre som .vb fil?
       
       Og så må eg ha litt rettleiing på kva som er rett device-ref. 
       
      Er det root-device, eller ref på funksjoner etc.
       
      Edit: I tillegg ser det ut til eg også må lære å legge inn kode som skjult tekst og rett formatering, slik som de andre bruker. 
    • Av Guahtdim
      Dette er en plugin for å kunne styre Daikin og Panasonic varmepumpe med wifi-modul
       
      Link til siste versjon
      DakinSeer 0.0.6.2
       
      (NB: Kun testet i Windows )
      Kompatibel med Google Home
      Hvis du allerede har installert tidligere versjoner så slett alle enheter og opprett på nytt
       
      Hva denne plugin gjør:
      Gir deg en oversikt over forskjellige status

      Gir deg mulighet til å styre varmepumpen fra "oversiktbildet"
      eller 
      legge det inn som en action i en (eller flere) events

       

       
      Hvordan sette opp :
      VIKTIG!!! Stopp Homeseer og ta en kopi av hele katalogen til Homeseer (normalt "c:\program files (x86)\Homeseer HS3" for Windows) og legg kopien på ett trygt sted i tilfelle du trenger å gå tilbake. Pakk ut filen i din Homeseer katalog - pass på at du får følgende oppsett (katalogen "Homeseer HS3" skal inneholde 2 nye filer HSPI_DaikinSeer.exe og HSPI_DaikinSeer.exe.config, mens du i katalogen Homeseer HS3\bin og Homeseer HS3\html\images skal ha fått en ny underkatalog - DaikinSeer)   Restart Homeseer Gå inn på Homeseer->Plugins->Manage og trykk enable på DaikinSeer  
      Hvordan å legge inn en varmepumpe
       
      Daikin
      For å kunne legge inn en varmepumpe så må du vite ip adressen til den.  Dette kan du finne i f.eks. routeren din. 
       
       
      Panasonic
       
      General Settings
      I "General Settings" vil du kunne sette opp hvor lang tid det skal gå mellom hver gang det hentes info fra varmepumpen (der er det en copy&paste bug ja). Time between triggering if true skal egentlig være "Time between heat pump check" eller noe.
      Du kan sette loggnivå.
      Og du får opp antall varmepumper tilknyttet (Number of heat pumps to check)

       
      Sette temperatur offset for alle varmepumper som kjøres av plugin

      Ved å sette noe annet enn 0 grader på heat point offset så vil temperaturene du ser i HomeSeer være justert i forhold til offset. Si at du setter det til -2,5 grader. Da vil du se 24 grader i HomeSeer på Heat point, men plugin vil ha fått inn 26,5 grader. Det samme vil også gjelde hvis du endrer temperatur. Hvis du endrer fra 24 til 23 grader så sendes 25,5 grader til varmepumpen.
      NB: Dette gjelder kun for plugin så hvis noen begynner å endre med fjernkontroll eller app på telefonen så vil ikke offset gjelde fra disse. Fjernkontroll vil heller ikke få med seg endringer sendt til varmepumpen.
       
      Streamer mode, Power mode og Econo mode(kun for Daikin) 

      Ved å velge en ip adresse fra dropdown som sier "Choose ip address for adding power and streamer" så vil det gjøres en test på om denne enheten har en eller flere av disse mulighetene. Hvis det blir testet ok så legges dette til i HomeSeer for gjeldende enhet.
       
       
      Endringslogg
      0.0.6.2 - Oppdatert Panasonic appversion til 1.20.0 Takk til @Olexfor feilmelding.
      0.0.5.9 - Rettet laveste temperatur for Daikin til å være 10 grader. Takk til @lasseruud for feilmelding.
      0.0.5.8 - Mere caching av HomeSeer device data. Lagt til EcoMode for Panasonic. Takke til @toonwolf for testing og gode tips.
      0.0.5.5 - Oppdatert slik at man selv kan sette versjonsnummer for innsending av https request til Panasonic Comfort Cloud. Også oppdatert slik at Daikin eiere kan skifte ip på varmepumpen. Dette vil gjøre at man slipper å lage alt man har satt opp på nytt.
      0.0.5.4 - Oppdatert versjonsnummer for innsending av https request til Panasonic Comfort Cloud. Vil hjelpe alle som får feilmeldingen "New version app has been published","code":4106. Takk til @toonwolf for testing.
      0.0.5.3 - Oppdatert versjonsnummer for innsending av https request til Panasonic Comfort Cloud. Vil hjelpe alle som får feilmeldingen "New version app has been published","code":4106. Takk til @Olex.
      0.0.5.2 - Lagt til mulighet for Daikin pumper å vise momentanforbruk av kW. Takk til @Kenneth og @Sleepy81 for testing.
      0.0.5.0 - Lagt til mulighet for Daikin pumper å vise dagsforbruk av kWh.
      0.0.4.2 - Fikset temp dropdown i action. Grunnet forskjell mellom US og NO regional settings med tanke på desimalseparator så ble den feil. Tydeligvis ikke noe de fleste med norsk oppsett bruker. Takk til @toonwolffor hjelp med å finne bug.
      0.0.4.0 - Endret slik at DaikinSeer enheter går inn i Google Home. Ulempen er at vi nå kun kan endre i hele grader (ikke halve som før). Takk til @toonwolffor hjelp
      0.0.3.0 - Og plutselig så kan man styre både Panasonic og Daikin varmepumper fra plugin. Takk til @toonwolffor hjelp til å finne ut av Panasonics api. Ikke alt er testet, men det vanlige funksjoene ser ut til å fungere som de skal for begge merker.
      0.0.1.6 - Fikset opp i Econo, Power og Streamer mode. Lagt til mulighet for styring av vertikalt spjeld. Takk til @hflatoey og @Kenneth for inspirasjon og feillogger.
      0.0.1.3 - Oppdatert slik at Connected vil endre seg til verdier over 0 hvis det er feil. I tillegg lagt til nytt ikon og ekstra tekst når det kommer feil tilbake fra Daikin varmepumpe
      0.0.1.1 - Lagt inn mulighet for å legge inn offsetverdi på temperatur. Denne vil gjelde for alle varmepumper som du kjører. I tillegg gitt mulighet til å legge til EconoMode, PowerMode og StreamerMode (hvis du har det på din varmepumpe). Disse tre modes må legges til ved å velge dette fra dropdown i Ip-config.
      0.0.0.9 - Fikset feil nummer brukt når man skulle skifte til FAN mode. Også oppdatert slik at plugin husker siste temperatur hvis man skifter mellom modes og en av de er FAN siden FAN ikke rapporterer temperatur tilbake (Dette forutsetter at plugin har fått en temperatur før man skifter til FAN mode. Hvis man starter i FAN mode vil default temperatur være 18 grader for kjøling og 10 grader for oppvarming). Takk til @Kenneth for å ha funnet denne.
      0.0.0.8 - Fikset håndtering av tall med desimaler fra Wifi adapter når man ikke kjører US oppsett.
      0.0.0.6 - Endret bygging av temperatur dropdown for å unngå feil ved desimal verdier0.0.0.7 - Fikset visning av temperatur ikoner + ekstra sjekk når man lager enhet slik at man ikke kan ha mer enn en varmepumpe per Ip
      0.0.0.5 - endret shum tilbake, men sørget for us-formatering av temperatur sendt til varmepumpe fra HomeSeer
      0.0.0.4 - endret shum i til å ikke ha verdi (fra shum=0&.. til shum=&..)
      0.0.0.3 - Fikset flere upper/lower case  i image-path
      0.0.0.2 - Lagt på litt mer debug logging og fikset noen upper/lower case i image-path
      0.0.0.1 - Første versjon
       
       
      Problemer/utfordringer/videreutvikling
      Få inn PowerMode, Streamer og EcoMode for de enheter som støtter dette. Automagisk legge dette inn i oppstart. Individuelt oppsett av offset for de som har mer enn en varmepumpe. Gjenopprette devicer tilbake til standard hvis man f.eks. har slettet eller gjort endringer på enhetene sine. Prøve å beholde deviceId hvis denne finnes. Få til en oppdatering av allerede eksisterende enheter hvis man har gjort rettelser på de. Kunne selv velge default temperatur hvis plugin ikke har noen temperatur å gå ut ifra Kunne vise brukt energi (bare Daikin modeller) Legge inn mulighet for å kjøre en offset på ønsket temperatur Kunne sende Streamer on/off og Powerful on/off for de som har dette Det skal ikke være mulig å lage mer enn en enhet/samling med devicer per ip. Hvis den allerede eksisterer så skal man få opp en advarsel. Hvordan få satt en drop-down til å ha korrekt formatering i forhold til hva HomeSeer forventer.  
       
      (Jeg skjønner ikke hvorfor det blir med ett bilde under her. Slettet det flere ganger, men det dukker opp alikevel)
       

    • Av Decibel
      Jeg vurderer å bytte fra HS3 til HS4, men vil gjerne høre litt om andres erfaringer før jeg tar steget. Siden jeg har mange plugins, så er jeg jeg spesielt interessert i erfaringer rundt dette med plugins som er laget for HS3. Hvor mye må kjøpes på nytt, og hvor mye kan man bruke som før? Ting som f.eks "HS3 Designer" er jo ikke akkurat gratis, og det blir fort dyrt å bytte dersom alt må kjøpes på nytt.
      Hva synes dere, nå som HS4 har vært ute en stund?
    • Av kjetilkl
      Så, etter å ha fiklet med HA i et par år, og aldri fått til det jeg vil pga manglende enhetsstøtte og andre ting så tok jeg mot til meg og kjøpte en HS4-lisens på Black May.
       
      Og - allerede etter en kveld så har jeg fått til å slå av og på lysene i stua med min Namrom K8 som jeg aldri fikk brukt i HA
       
      Derimot har det dukket opp endel spørsmål underveis.🤪
       
      1. Jeg har endel aqara sensorer og Opple-brytere jeg gjerne skulle ha brukt, men fant ut at Zigbee-pluginet kun støtter to (for meg)ukjente interfacet (har Conbee II) - Er det slik at jeg da må kjøpe JowiHue pluginet for å få dette til å virke? - Eller er det andre måter, eventuelt at det kommer offisiell støtte? Eller er det beste å kjøpe nytt Zigbee-interface som er støttet offisielt? (Har også noe Hue-utstyr, men dette styrer jeg kun via Hue i dag)
       
      2. Jeg ser det finnes en plugin for Ikea også som koster penger - må jeg ha denne i tillegg hvis jeg ønsker å bruke Ikea-utstyr?
       
      2. Og - jeg har satt opp dette på en W10-pc som kjører på en gammel HP microserver med ESXi, plugget usb-enhetene inn bak, og lagt de til i VMen - men, det virker som den "mister" de virtuelle COM-portene som opprettes innimellom? -Èn gang så forsvant hele COM-porten så jeg måtte legge den til i ESXI pånytt, og etter dette har det også skjedd flere ganger at HS mister forbindelsen med ZW nettverket, så jeg må slå av og på pluginet for at det skal begynne å virke igjen. - Noen som har noen erfaringer eller innsikt her? (UZB1) (edit: Når dette skjer får jeg feilmelding i node info at COM-porten ikke finnes (bilde 2), men det gjør den (den synes i Windows)
       
      3. Har heller ikke helt funnet ut om jeg kan få til kontinuerlig dimming på bryteren min. - Jeg har laget en event som setter styrken til det jeg ønsker (f.eks 25% som under), men skulle gjerne hatt det til å fungere slik at hvis jeg holder inne "av-knappen" så dimmer den ned, og motsatt opp på "på-knappen". Er det noe jeg har oversett, eller hvordan kan jeg få til dette?
       


    • Av jrewing
      Har blitt med på et slags prøveprosjekt/pilot fra Lyse. De har åpnet HAN-porten og sendt meg en liten smarthus-startpakke.
       
      Jeg har Homeseer og stort sett z-wave fra før. Litt wifi og Verisure har jeg også. Men Zigbee har jeg ingenting av. Håpet nå er at jeg kan få denne hub-en til å snakke med Homeseer, helst uten å kjøpe zigbeegrensesintt.
       
      De kaller den Eva i manualen, men på pakken heter den Datek.
       
       

×
×
  • Opprett ny...