Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

strips

Medlemmer
  • Innlegg

    96
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av strips

  1. Nok en tråd om backup av z-wave men et kjapt søk ga meg lite. Uansett et viktig tema.

     

    Er det skjedd noe nyutvikling eller noen nye produkter som tillater full backup/restore av en z-wave-pinne. Helst i Linux via kommandolinje eller scriptbart på en eller annen måte.

     

    Så lenge man kan kjøre automasjonssystemene i containere er det lett å ha en full (identisk) kopi av hele systemet som kan spinnes opp hvis noe galt skulle skje. Da er det bare Z-wave-pinnen som ikke har noen form for automatisk redundans. 

     

    Aeotec har jo sin backup-software men det er Windows-programvare og er GUI-styrt. Eller har det kommandolinje? 

     

    Noen som har kjørt denne programvaren i Linux med Wine eller annen software? Har ikke lyst å bruke en egen windows-lisens bare for dette.

  2. Hvis du har en 10m patchekabel og Pulse for hånden kan du bare koble til ved måleren og bruke telefonen som hotspot.

     

    Jeg kommer til å gjøre som deg en eller annen dag. Men om det bli neste uke eller neste måned vet jeg ikke. Kan ikke fatte at det ikke skal gå. Hvis måler ikke klarer å levere nok strøm så kobler du bare til den medfølgende mikro-usb-laderen.

  3. De gjør samme jobben men Nest-serien er nyere og vet ikke om det kommer mer og bedre funksjonalitet. Jeg ville tippe Google Home har bedre lyd en Nest Mini men Nest Mini skal ha fått bedre lyd en forgjengeren Google Home Mini.

     

    Jeg kan ikke se noen grunn til at du ikke kan bruke flere Google Home-enheter på Homeseer. Skal gå fint å blande. Du kan forsåvidt teste integrasjonen på telefonen først om du har Android. Usikker på Iphone.

  4. Hei,

     

    Jeg har lyst å kjøpe en haug av disse å bytte alle Fibaro/Qubino-dimmerene mine. WAF er ikke på topp med vippebrytere og impuls-fjærer. Ser at Z-Dim kan styre andre Z-dim men blir litt usikker når jeg leser dok om de kan styre andre dimmere som krever Multi Level. Det står at Z-Dim bruker Basic Set mellom flere Z-Dim.

     

    At den krever N-leder (3-wire) er helt innafor for min del selv om det er litt synd. Det begrenser noen muligheter.

     

    Må nok kjøpe en å teste litt først men det er vel andre her som har rukket å teste litt. Fungerer assosiasjon mot andre dimmere som Fibaro og Qubino?

     

    Stian

  5. Som @Moskus sier må du trykke på Update-knappen for å hente dem fra enheten. Til info er de kun lagret på selve enheten og de blir normalt ikke persistert i Homeseer. Men enheten må være våken. En enhet koblet til permanent strøm er alltid våken og der kan man bare klikke Update når man vil. Batteri-enheter har litt forskjellige måter å holde seg våkne. Les manualen.

     

    Feks. tror jeg det var Fibaro multisensor som sier en ting i manualen men synes ikke det alltid funket. Så her kan det være lurt å prøve seg litt frem i tillegg. Ha enheten så nære som Z-Wave-dongla som mulig. Det kan funke på avstand men er de på batteri er det ingen grunn til å ikke ta den med til dongla.

     

    Hvis alt går at skogen, resett/fjern enhet fra nettverket og legg til på nytt. De fleste enheter oppretter selv en assosiasjon til kontroller.

  6. Har tenkt litt mer. Ulempen med å legge på en ny ID før man persisterer er hvis man glemmer en verdi eller gjør feil så blir det lagret feil. Hvis man likevel skal ha en mapping så er det bedre å gjøre den etter persisteringen.

     

    Jeg kjenner jeg nærmer meg en Oracle Database ? Kanskje å skyte spurv med kanon men det er i hvert fell noe jeg kan. Så kan man alltids bytte ut en SQL-database med noe annet uten for mye styr senere. Er litt for enkelt å falle tilbake på det man kan. Lærer ikke like mye av det.

  7. Haha, det er en vei jeg ikke ønsker å gå. Hvis man kunne scripte 95% av den løsningen...

     

    Jeg kan ikke influxdb godt nok men lurer på å dra dette inn i en relasjonsdatabase. Der er det en lek i parken å lage en mappingtabell for enhetene. Så flytter jeg hele problemstillingen.

     

    Men en relasjonsdatabase trenger en ok datamodell. Er her influxdb er genialt. Bare dytte ting inn og så har du det der :)

     

    Jeg bruker et vb-script som dumper samtlige enheter ut til influxdb. En mulighet er å ha en fil med mapping til ønskede navn/ID. Ganske lett med en JSON-fil.

  8. Jeg har begynt å logge ALT til influxdb for å kunne grafe litt i Grafana.

     

    Nå benytter jeg Reference ID på enheten for å identifisere den. Den er egentlig litt dum å bruke da den blir byttet ut hvis jeg legger til en enhet på nytt.

     

    Hva er det beste / smarteste å bruke. Ideelt sett skulle jeg gjerne hatt ett felt man kan selv redigere men gjerne kan være forhåndsutfylt.

     

    De feltene jeg kan se er

    • Reference ID - ikke aktuell da den ikke kan endres
    • Device Name - absolutt ett alternativ hvis jeg klarer å bli enig med meg selv om en fast standard og alle må ha unike navn. Her er jeg i konflikt mellom å ha et kort og enkelt navn og langd beskrivende navn men unikt.
    • Code - En mulighet. Er det mulig å endre denne på alle type enheter (utenom enheter som bruker dette som intern-adressering).
    • Address - Igjen en mulighet men tipper noen type enheter benytter denne å lagre sin ID. 

     

    Ser nå at Z-Wave får populert Code og Address. Usikker på om det var sånn før og men tipper det kom med siste beta Z-wave-plugin. De fjerner z-wave-databasen og har alle instillinger sammen med enheten. Så de utgår.

     

    Da står jeg kun igjen med Device name.

  9. Takker for tips @Moskus og @Guahtdim

     

    Enig at det er penere og kjappere med en if (debug) men etter hvet som de vokste ble det sånn. Så er det veldig praktisk å bare lime inn en linje og endre teksten. Så det er med overlegg one-linere.

     

    Mulig det hadde blitt mer oversiktlig med sub-rutiner. Men for et så lite script er det lite vits. VB.Net er kun noe jeg tar i fordi jeg må. Skulle helst gjort dette i C# og øvd meg på det men er så få eksempler på C#-kode for Homeseer.

     

    Ellers hjelper det å bruke Visual Studio med tenScripting for debugging.

     

     

  10. Akkurat ferdig testet et script for å styre vår Systemair SAVE VTR 300 via Modbus. Det er nok tråder om Modbus her at jeg gidder å snakke om det nå :)

     

    Scriptet leser to Netatmo innemoduler sin Co2, temp og relativ fuktighet. Ut i fra disse verdiene så settes aggregatet i auto som standard, crowded (party) eller refresh (boost) basert på noen grensetall.

     

    Takk til @Moskus og  @Hillmar for formel for absolutt fuktighet

     

     

    Forenklede regler

    • Brannalarm: TODO
    • Hvis trykkvakt eller spesialmodus (kjøkkenhette, vedovn, sentralstøvsuger) er aktivert skal vi ikke endre noe.
    • Hvis stue eller bad har for høy Co2 så øker luftmegden først til Crowded så Boost.
    • Hvis bad har høyere absolutt fuktighet en stuen med en viss margin så økes luftmengden til Boost
    • Hvis ingen av regelene over treffer eller Co2 er under en terskel så sett til Auto.

     

    For å bruke scriptet må du endre alle variablene i toppen som begynner med dev.

     

    Det er 3 regel-blokker lengre nede som dekker mitt behov og kan dupliseres for flere rom eller fjernes hvis man ikke har nok sensorer.

     

    Class VentilatorControl
        Public Sub Main(ByVal Parms As Object)
    
            Dim Debug As Boolean = True
            Dim logName As String = "VentilatorControl"
    
            Console.WriteLine("Started: " & logName)
            If Debug Then hs.WriteLog(logName, "Started")
    
    
            Dim fireAlarm As Boolean = False ' for the future when I get a fire alarm integrated
    
            Dim devBath1_RH As Integer = 820 ' netatmo bad innemodul
            Dim devBath1_T As Integer = 817 ' netatmo bad innemodul
            Dim devBath1_Co2 As Integer = 821 ' netatmo bad innemodul
            Dim devLivingRoom1_RH As Integer = 788 ' netatmo stue hovedmodul
            Dim devLivingRoom1_T As Integer = 783 ' netatmo stue hovedmodul
            Dim devLivingRoom1_Co2 As Integer = 787 ' netatmo stue hovedmodul
            Dim devVentModeGet As Integer = 774 ' systemair Modbus
            Dim devVentModeSet As Integer = 773 ' systemair Modbus
    
            Dim valueLivingRoom1_T As Double = hs.DeviceValueEx(devLivingRoom1_T)
            Dim valueLivingRoom1_Co2 As Integer = hs.DeviceValue(devLivingRoom1_Co2)
            Dim valueLivingRoom1_RH As Double = hs.DeviceValueEx(devLivingRoom1_RH)
            Dim valueLivingRoom1_AH As Double = AbsHumidity(valueLivingRoom1_RH, valueLivingRoom1_T)
            Dim valueBath1_T As Double = hs.DeviceValueEx(devBath1_T)
            Dim valueBath1_Co2 As Integer = hs.DeviceValue(devBath1_Co2)
            Dim valueBath1_RH As Double = hs.DeviceValueEx(devBath1_RH)
            Dim valueBath1_AH As Double = AbsHumidity(valueBath1_RH, valueBath1_T)
            Dim humidDeltaBath1 As Double = Math.Round(valueBath1_AH / valueLivingRoom1_AH, 2)
            Dim valueVentModeGet As Integer = hs.DeviceValue(devVentModeGet)
    
            Dim ventModeGetCodeArray(12) As String
            ventModeGetCodeArray(0) = "Auto"
            ventModeGetCodeArray(1) = "Manual"
            ventModeGetCodeArray(2) = "Crowded"
            ventModeGetCodeArray(3) = "Refresh"
            ventModeGetCodeArray(4) = "Fireplace"
            ventModeGetCodeArray(5) = "Away"
            ventModeGetCodeArray(6) = "Holiday"
            ventModeGetCodeArray(7) = "Cooker Hood"
            ventModeGetCodeArray(8) = "Vacuum Cleaner"
            ventModeGetCodeArray(9) = "CDI1"
            ventModeGetCodeArray(10) = "CDI2"
            ventModeGetCodeArray(11) = "CDI3"
            ventModeGetCodeArray(12) = "PressureGuard"
    
            Dim ventModeSetCodeArray(7) As String
            ventModeSetCodeArray(0) = "None"
            ventModeSetCodeArray(1) = "Auto"
            ventModeSetCodeArray(2) = "Manual"
            ventModeSetCodeArray(3) = "Crowded"
            ventModeSetCodeArray(4) = "Refresh"
            ventModeSetCodeArray(5) = "Fireplace"
            ventModeSetCodeArray(6) = "Away"
            ventModeSetCodeArray(7) = "Holiday"
    
            ' Co2 threshold levels have a severity of 3 levels
            Dim co2ThresholdNormal As Integer = 550 ' less than
            Dim co2ThresholdHigh As Integer = 700 ' higher than
            Dim co2ThresholdMax As Integer = 900 ' higher than
    
            ' relative humididy threshold levels have a severity of 2 levels
            Dim humidDeltaThresholdNormal As Double = 1.1 ' less than
            Dim humidDeltaThresholdHigh As Double = 1.4 ' hihger than
    
            If Debug Then hs.WriteLog(logName, "valueLivingRoom1_T: " & valueLivingRoom1_T)
            If Debug Then hs.WriteLog(logName, "valueLivingRoom1_Co2: " & valueLivingRoom1_Co2)
            If Debug Then hs.WriteLog(logName, "valueLivingRoom1_RH: " & valueLivingRoom1_RH)
            If Debug Then hs.WriteLog(logName, "valueLivingRoom1_AH: " & valueLivingRoom1_AH)
            If Debug Then hs.WriteLog(logName, "valueBath1_T: " & valueBath1_T)
            If Debug Then hs.WriteLog(logName, "valueBath1_Co2: " & valueBath1_Co2)
            If Debug Then hs.WriteLog(logName, "valueBath1_RH: " & valueBath1_RH)
            If Debug Then hs.WriteLog(logName, "valueBath1_AH: " & valueBath1_AH)
            If Debug Then hs.WriteLog(logName, "humidDeltaBath1: " & humidDeltaBath1)
            If Debug Then hs.WriteLog(logName, "Current Ventilator Mode: " & ventModeGetCodeArray(valueVentModeGet))
    
    
            If Debug Then hs.WriteLog(logName, "co2ThresholdNormal: " & co2ThresholdNormal)
            If Debug Then hs.WriteLog(logName, "co2ThresholdHigh: " & co2ThresholdHigh)
            If Debug Then hs.WriteLog(logName, "co2ThresholdMax: " & co2ThresholdMax)
    
            ' assign index from ventModeSetCodeArray
            Dim normalVentilatorGetMode As Integer = Array.IndexOf(ventModeGetCodeArray, "Auto")
            Dim normalVentilatorSetMode As Integer = Array.IndexOf(ventModeSetCodeArray, "Auto")
            Dim highVentilatorGetMode As Integer = Array.IndexOf(ventModeGetCodeArray, "Crowded")
            Dim highVentilatorSetMode As Integer = Array.IndexOf(ventModeSetCodeArray, "Crowded")
            Dim maxVentilatorGetMode As Integer = Array.IndexOf(ventModeGetCodeArray, "Refresh")
            Dim maxVentilatorSetMode As Integer = Array.IndexOf(ventModeSetCodeArray, "Refresh")
            Dim ventilatorSetLevel As Integer
            Dim ventilatorSetModeArray(3) As String
            ventilatorSetModeArray(1) = "Auto"
            ventilatorSetModeArray(2) = "Crowded"
            ventilatorSetModeArray(3) = "Refresh"
    
    
            If (fireAlarm) Then
                ' If fire alarm is true we stop ventilator or set it to minimum
                ' TODO identify best setting to disable the ventilator
                ' set mode manual
                ' set manual fan level to 
                hs.WriteLog(logName, "Firealarm not implemented. Ventilator is in " & ventModeGetCodeArray(valueVentModeGet) & " mode.")
    
            ElseIf (valueVentModeGet >= Array.IndexOf(ventModeGetCodeArray, "Cooker Hood")) Then
                ' If ventilator is in get mode 7 (Cooker Hood) or higher we do nothing because the system is not in balance
                hs.WriteLog(logName, "Ventilator is in " & ventModeGetCodeArray(valueVentModeGet) & " mode, we do nothing!")
    
            Else
                ' Always start with normal as default level
                ventilatorSetLevel = 1
    
                ' Co2 in living room 1
                If (valueLivingRoom1_Co2 > co2ThresholdMax) And (ventilatorSetLevel < 3) Then
                    ventilatorSetLevel = 3
                    If Debug Then hs.WriteLog(logName, "If (valueLivingRoom1_Co2 > co2ThresholdMax) And (ventilatorSetLevel < 3) Then, setting ventilatorSetMode to " & ventilatorSetLevel)
                ElseIf (valueLivingRoom1_Co2 > co2ThresholdHigh) And (ventilatorSetLevel < 2) Then
                    ventilatorSetLevel = 2
                    If Debug Then hs.WriteLog(logName, "ElseIf (valueLivingRoom1_Co2 > co2ThresholdHigh) And (ventilatorSetLevel < 2) Then, setting ventilatorSetMode to " & ventilatorSetLevel)
                ElseIf (valueLivingRoom1_Co2 <= co2ThresholdNormal) And (ventilatorSetLevel = 1) Then
                    If Debug Then hs.WriteLog(logName, "ElseIf (valueLivingRoom1_Co2 <= co2ThresholdNormal) And (ventilatorSetLevel = 1) Then, ventilatorSetLevel = 1")
                End If
    
                ' Co2 in bath 1
                If (valueBath1_Co2 > co2ThresholdMax) And (ventilatorSetLevel < 3) Then
                    ventilatorSetLevel = 3
                    If Debug Then hs.WriteLog(logName, "If (valueBath1_Co2 > co2ThresholdMax) And (ventilatorSetLevel < 3) Then, setting ventilatorSetMode to " & ventilatorSetLevel)
                ElseIf (valueBath1_Co2 > co2ThresholdHigh) And (ventilatorSetLevel < 2) Then
                    ventilatorSetLevel = 2
                    If Debug Then hs.WriteLog(logName, "ElseIf (valueBath1_Co2 > co2ThresholdHigh) And (ventilatorSetLevel < 2) Then, setting ventilatorSetMode to " & ventilatorSetLevel)
                ElseIf (valueBath1_Co2 <= co2ThresholdNormal) And (ventilatorSetLevel = 1) Then
                    If Debug Then hs.WriteLog(logName, "ElseIf (valueBath1_Co2 <= co2ThresholdNormal) And (ventilatorSetLevel = 1) Then, ventilatorSetLevel = 1")
                End If
    
                ' humidity in bath 1
                If (humidDeltaBath1 > humidDeltaThresholdHigh) And (ventilatorSetLevel < 3) Then
                    ventilatorSetLevel = 3
                    If Debug Then hs.WriteLog(logName, "If (humidDeltaBath1 > humidDeltaThresholdHigh) And (ventilatorSetLevel < 3) Then, setting ventilatorSetMode to " & ventilatorSetLevel)
                ElseIf (humidDeltaBath1 <= humidDeltaThresholdNormal) And (ventilatorSetLevel = 1) Then
                    If Debug Then hs.WriteLog(logName, "ElseIf (humidDeltaBath1 <= humidDeltaThresholdNormal) And (ventilatorSetLevel = 1) Then, ventilatorSetLevel = 1")
                End If
    
    
                ' If the current ventilator mode is at the same mode/level we want to set then we do not have to do anything
                If (ventModeGetCodeArray(valueVentModeGet) = ventilatorSetModeArray(ventilatorSetLevel)) Then
                    If Debug Then hs.WriteLog(logName, "ventModeGetCodeArray(valueVentModeGet) = " & ventModeGetCodeArray(valueVentModeGet))
                    If Debug Then hs.WriteLog(logName, "ventilatorSetModeArray(ventilatorSetLevel) = " & ventilatorSetModeArray(ventilatorSetLevel))
                    If Debug Then hs.WriteLog(logName, "If (ventModeGetCodeArray(valueVentModeGet) [" & ventModeGetCodeArray(valueVentModeGet) & "] = ventilatorSetModeArray(ventilatorSetLevel)[" & ventilatorSetModeArray(ventilatorSetLevel) & "]  ) Then, no changes in ventilatorSetMode")
                Else
                    ' Set ventilator device devVentModeSet to index of ventModeSetCodeArray where value is ventilatorSetLevel translated thru ventModeSetCodeArray
                    If Debug Then hs.WriteLog(logName, "If Not (ventModeGetCodeArray(valueVentModeGet) [" & ventModeGetCodeArray(valueVentModeGet) & "] = ventilatorSetModeArray(ventilatorSetLevel)[" & ventilatorSetModeArray(ventilatorSetLevel) & "]  ) Then, set ventilator to " & ventilatorSetModeArray(ventilatorSetLevel))
                    If Debug Then hs.WriteLog(logName, "ventilatorSetLevel = " & ventilatorSetLevel)
                    If Debug Then hs.WriteLog(logName, "ventilatorSetModeArray(ventilatorSetLevel) = " & ventilatorSetModeArray(ventilatorSetLevel))
                    If Debug Then hs.WriteLog(logName, "before set devVentModeSet to " & Array.IndexOf(ventModeSetCodeArray, ventilatorSetModeArray(ventilatorSetLevel)))
    
                    If Debug Then hs.WriteLog(logName, "hs.CAPIControlHandler(hs.CAPIGetSingleControl(" & devVentModeSet & ", True, " & ventilatorSetModeArray(ventilatorSetLevel) & ", False, False))")
                    hs.CAPIControlHandler(hs.CAPIGetSingleControl(devVentModeSet, True, ventilatorSetModeArray(ventilatorSetLevel), False, False))
                    hs.WriteLog(logName, "set devVentModeSet to " & Array.IndexOf(ventModeSetCodeArray, ventilatorSetModeArray(ventilatorSetLevel)))
    
                End If
    
            End If
    
        End Sub
    
        Function AbsHumidity(ByVal relHumidity As Double, ByVal temp As Double) As Double
            ' Formula found here:
            ' https://www.hjemmeautomasjon.no/forums/topic/5896-konvertere-fra-relativ-til-absolutt-luftfuktighet/?do=findComment&comment=68448
            AbsHumidity = Math.Round(6.112 * Math.E ^ ((17.67 * temp) / (temp + 243.5)) * relHumidity * 2.1674 / (273.15 + temp), 2)
        End Function
    
    End Class

     

  11. 7 hours ago, berland said:

    Min Aeotec Z-stick tar nærmere 15 minutter. Er i krisemodus for Z-wave i huset, det er ikke stabilt, og det har ikke hjulpet å overføre backup til en reserve-stick. Har 50% "cancelled frames", og må vel til slutt trekke i snora og ta factory reset av kontroller og alle rundt 40 z-wave enheter. Arg. Skulle gitt mye for en backup for ca en måned siden, men det har jeg ikke (og vet heller ikke om det hadde hjulpet, siden jeg ikke skjønner hvorfor det begynte å gå galt nå).

    Er det noen endringer i nettet siden det fungerte bra? Nye enheter, fjernet noe, flyttet på en enhet? Noe som har mistet strømmen og ramlet ut av mesh? 

  12. 8 hours ago, SveinHa said:

    Måtte ta en test bare for å se om jeg driver med løgn eller skryt ?

     

    Med Aeotec sitt program leste jeg eeprom på UZB på 9:20 og la filen inn på en Z-Stick på 10:20 så litt kjappere enn jeg sa. Z-Sticken ga ny HomeID i HS så den var ikke umiddelbart operativ. Antar jeg må ta "Import Node info from controller..." men jeg testet ikke det nå, bare satte tilbake UZB og er oppe og kjører igjen.

    Mener jeg fikk samme ID mellom to Z-stick. 

  13. 4 minutes ago, ZoRaC said:

     

    Men bruker du da Aeotech sitt verktøy? For det er det som må brukes. Stoppe interfacet i HS, ta backup via Aeotec og så starte interfacet i HS igjen.

    Det @stripsforeslår høres ut som en god idé, hvis det funker! :) Tror jeg må se på det jeg også, for jeg har også 2x UZB1, uten backup...

     

    Har sett prat om at Aeotec sin software også kan ta backup/restore på UZB1. Er det noen som har testet dette? Har også to stk UZB1 liggende :) Tenkte å sette dem opp som repeatere men greit å vite om kan kan bruke de om hverandre for Z-Stick.

  14. 48 minutes ago, lasseruud said:

    Finnes det noe z-wave interface som støtter backup/restore nå via Homeseer nå?

     

    Ikke i Europa mener jeg å ha lest.

     

    Aeotec Z-Stick har ett eget backup-restore-verktøy som skal fungere. Jeg har testet på 1 node og det virket.

     

    Jeg har kjøpt meg 2 stk Z-Stick. Planene er å ta jevnlige backup av den i bruk med restore på den andre. Så rullerer jeg på dem. På den måten vet jeg at backup/restore har fungert hver gang.

     

    På sikt håper jeg å bruke ser2net eller lignende å ha Z-Stick på en raspberry pi og sende USB over nettverket. Da håper jeg det lar seg scripte å ta ned Homeseer, koble om seriellporten til en windows maskin som så starter backup. Så kobler tilbake porten før HS starter opp igjen. I det minste kan dette uføres manuelt uten å måtte fysisk koble om noe.

    • Like 1
  15. 8 hours ago, bergen77 said:

    Timer vel?

    ? Noe jeg har bommet på? Holdt på litt sent i går så skal ikke se bort i fra det.

    Jeg mener dager, Det er mellom 5 og 6 måneder igjen til filterskifte. Se den øverste enheten "VentilatorFilterChangeDays" De to nederste verdiene er sekunder til filterskifte, to 16 bit register representerer et 32bits tall. Den ene er de 16 høyeste bitsene og den andre er de 16 laveste. 

  16. Lagde et script for å kalkulere antall dager igjen til filterbytte ut i fra høy og lav 16bits registere for sekunder. 

     

    Register 7005 og 7006.

     

    Script:

    Sub Main(ByVal Parms As Object)
    
    	Dim Debug As Boolean = False
    	Dim logName As String = "RemainingFilterTime"
    
    	Dim devVentilatorFilterChangeDays As Integer = 848
    	Dim devRefLoBits As Integer = 846
    	Dim devRefHiBits As Integer = 847
    
    
    	' seconds in two 16 bit registers, low and high
    	Dim secondsLoBits As UInt16
    	Dim secondsHiBits As UInt16
    	Dim seconds As UInt32
    	Dim days As UShort
    
    
    
    	If Debug Then hs.WriteLog(logName, "Started")
    
    	Try
    
    		secondsLoBits = Convert.ToUInt16(hs.DeviceValue(devRefLoBits))
    		If Debug Then hs.WriteLog(logName, "secondsLoBits: " & secondsLoBits)
    		secondsHiBits = Convert.ToUInt16(hs.DeviceValue(devRefHiBits))
    		If Debug Then hs.WriteLog(logName, "secondsHiBits: " & secondsHiBits)
    
    		seconds = Convert.ToUInt32(secondsLoBits + (secondsHiBits * 65536))
    		If Debug Then hs.WriteLog(logName, "seconds:" & seconds)
    
    		days = CUShort(seconds / 60 / 60 / 24)
    		If Debug Then hs.WriteLog(logName, "days: " & days)
    
    		hs.SetDeviceValueByRef(devVentilatorFilterChangeDays, days, True)
    		hs.WriteLog(logName, "Set VentilatorFilterChangeDays to " & days & " and trigger)")
    
    	Catch ex As Exception
    		hs.WriteLog(logName, "Exception " & ex.ToString)
    		hs.WriteLog(logName, "StackTrace: " & ex.StackTrace)
    	End Try
    
    End Sub

    Filterbytte.thumb.png.53e70d8c87b6ea9ef37b2a5f909809d6.png

     

    • Like 1
  17. 6000 - 6006 var registerene vi sjekket for å finne ut at jeg måtte trekke fra 1 på alle adressene i EasyModbus. 

     

    Dump fra scriptet mitt.

    6001, returned: 2020, REG_TIME_YEAR
    6002, returned: 1, REG_TIME_MONTH
    6003, returned: 7, REG_TIME_DAY
    6004, returned: 16, REG_TIME_HOUR
    6005, returned: 1, REG_TIME_MINUTE
    6006, returned: 52, REG_TIME_SECOND


     

  18. Nå fikk jeg også denne fra Litauen:

    Quote

    Communication between IAM and SAVE VTR 300 external control panel has no relation with Modbus.

     

    Det er forsåvidt den eneste fornuftige forklaringen. Når det snakkes om konvertering på IAM så kan forsåvidt transporten av Modbus RTU være noe helt annet på RJ11-pluggen.

  19. @MrE, enig angående Modbus master. Det er noe her som ikke henger på greip. Systemair sier at aggregatet  ikke er master. 

     

    @bergen77, Det står i IAM-manualen at den går på Modbus og oversetter fra Modbus TCP til Modbus RTU, samt at det følger med en RJ10-modbuskabel.

     

    Aggregatene har modbus-adresse 1 og IAM har modbus-adresse 2. Hvis det kun er slaver som er adresserte så er både IAM og aggregat slaver. HMI er kanskje master?

     

    Eller så har @bergen77 rett og det er noe annet proprietært i tillegg.

     

    Argh ?

     

    Sitat fra Modbus variabel-listen får meg til å tro at HMI / kontrollpanel er master og at A/B-terminalene er en egen buss da man som regel slenger på en 3. part Master for å lese ut Modbus RTU. 

    Quote

    1 Information
    Modbus is a serial communication protocol used for transmitting information over serial lines between electronic devices. The device requesting the information is called “Master”, while devices supplying the requested information are “Slaves”. When it comes to planning data communication for open, multi-vendor industrial control systems, Modbus is
    the first choice of end users and integrators alike.


    The Modbus/RTU protocol defines how a “master” device polls one or more “slave” devices to read and write data in real time by means of RS232, RS422, or RS485 serial data communication. Modbus/TCP, an extension of Modbus/RTU, defines how Modbus/RTU and Modbus/ASCII messages are encoded within and transported over TCP/IP-based networks. Modbus/TCP is just as simple to implement and flexible to apply as the original Modbus/RTU.


    1.1 Physical layer
    New Systemair controls have standard and readily available Modbus/RTU over three-wire (A, B and GND) RS485 on the Connection Board (CB) and Modbus/TCP over TCP/IP using Internet Access Module (available as an accessory - Art. No. 211243). For Modbus/TCP connection over TCP/IP using Internet Access Module refer to the IAM quick guide.


    Slave address: 1 to 247
    Baud rate: 9600 to 115200
    Parity: None, Even, Odd
    Stop bits: 1 (fixed)


    Parameters can be changed in Modbus page (Service -> Communication -> Modbus) in the Control Panel.

     

  20. 43 minutes ago, MrE said:

    Aggregatet er vel master. Tilkoblede enheter blir (adresserte) slaver.

     

    RJ11 splitter er istedenfor å klippe kabel og skjøte..?

    2 ledere til strøm (til HMI) og 2 ledere til modbus + evnt ground.

     

    Hvilke rare svar får du fra dine modbus-forespørsel? Hvilke registre spør du på?

     

    Ikke i følge Systemair i Litauen:

    Mitt spm: This meaning the VTR 300 unit is the master and continuously pushing all values to the slaves and polling for change requests? 

    Svar: This is not true. VTR 300 is pushing data then when he gets request from Modbus master to push the data.

     

    Mine rare svar fra Modbus er nå fikset. Samme fyren som har gitt meg disse svarene la merke til at min Java-Modbus-klient EasyModbus har feil offset. Alle adressene lå 1 for høyt. Når jeg trakk fra 1 på alle spørringene ble det korrekt. 

     

    11 minutes ago, bergen77 said:

    Hvor er det dere leser at hmi er modbus? Noen som har prøvd å lese trafikken på linjen?
    Man kan oppdatere software på aggregatet ved hjelp av IAM eller displayet, hvordan skal dette foregå om det er modbus?
    Måten det kobles tilsier heller ikke modbus.

    Mulig det er forskjell på eldre vsr og ny, modbus registrene ble endret rundt 2017 eller noe sånt.

     

    Jeg har vel ikke lest at HMI er modbus. Så lenge det er koblet på samme fysiske interface som et eksternt panel og IAM kan være må det være Modbus siden IAM er modbus. Hvis det er Touch-panelet som er fast montert på skapet og er koblet i egen plugg/kontakt så kan det være hva som helst.

     

    Ett tidligere svar på mine spørsmål om hva som er master og slave, som ikke akkurat gjør det klarere for min del.

     

    Your question is a bit unclear for me. But I will try to answer it. You can use IAM as Modbus TCP slave and external control panel. External control panel doesn’t affect IAM Modbus TCP connection. Is it same if You have external control panel and IAM which is connecting to cloud.

     

    Litt "- God dag man. - Økseskaft." jeg spurte oprinnelig ikke om TCP men kun seriell-bussen på aggregatene. 

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.