ZoRaC Skrevet 25. februar 2018 Skrevet 25. februar 2018 @Moskus har et script som holder orden på offentlige fridager: Dessverre holder ikke denne styr på dager du er hjemme utover de offentlige fridagene - sykedag, innklemt dag, vinterferie, høstferie, påskeferie, sommerferie, osv, osv. Dvs at hvis du bruker dette til å styre senking av temperatur når du er på jobb, så blir det veldig kaldt disse dagene! Min løsninger er å lage en egen Google Calendar for "huset", som jeg leser av via Google sitt API (med PHP) og oppdaterer HomeSeer utifra det. Jeg kjører på Linux, men ser ingenting i veien for at samme løsning kan kjøres på Windows. PS: Dette bruker PHP fra kommandolinje, så man trenger ikke kjøre en webserver med PHP-støtte eller åpne noen porter i brannmurer, osv. 1. Aller først, implementer @Moskus sitt script fra lenken over og sjekke at det virker. 2. Deretter er det bare følg denne guiden og se at du får tilgang til å lese ut data fra din primære Google-kalender: https://developers.google.com/google-apps/calendar/quickstart/php Sitat php quickstart.php Upcoming events: Test av API (2018-02-25T17:30:00+01:00) 3. Så lager du en egen "hus-kalender". Gå deretter inn på innstillinger for kalenderen og finn kalender-ID'en: 4. Legg inn dette scriptet som "HomeSeer.php" (og rediger de 4 øverste linjene): Spoiler <?php //////////////////////////////////////////////////////////////////////////////// $calendarId = '[email protected]'; $deviceID = 123; $friTekst = array('syk', 'ferie', 'sykt barn', 'fri', 'fridag', 'planleggingsdag'); $pathToScript = '/HomeSeer/scripts/google'; //////////////////////////////////////////////////////////////////////////////// require_once $pathToScript . '/vendor/autoload.php'; define('APPLICATION_NAME', 'Google Calendar - HomeSeer'); define('CREDENTIALS_PATH', $pathToScript . '/calendar-php-homeseer.json'); define('CLIENT_SECRET_PATH', $pathToScript . '/client_secret.json'); // If modifying these scopes, delete your previously saved credentials by deleting "calendar-php-homeseer.json" define('SCOPES', implode(' ', array( Google_Service_Calendar::CALENDAR_READONLY) )); if (php_sapi_name() != 'cli') { throw new Exception('This application must be run on the command line.'); } /** * Returns an authorized API client. * @return Google_Client the authorized client object */ function getClient() { $client = new Google_Client(); $client->setApplicationName(APPLICATION_NAME); $client->setScopes(SCOPES); $client->setAuthConfig(CLIENT_SECRET_PATH); $client->setAccessType('offline'); // Load previously authorized credentials from a file. if (file_exists(CREDENTIALS_PATH)) { $accessToken = json_decode(file_get_contents(CREDENTIALS_PATH), true); } else { // Request authorization from the user. $authUrl = $client->createAuthUrl(); printf("Open the following link in your browser:\n%s\n", $authUrl); print 'Enter verification code: '; $authCode = trim(fgets(STDIN)); // Exchange authorization code for an access token. $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); // Store the credentials to disk. if(!file_exists(dirname(CREDENTIALS_PATH))) { mkdir(dirname(CREDENTIALS_PATH), 0700, true); } file_put_contents(CREDENTIALS_PATH, json_encode($accessToken)); printf("Credentials saved to %s\n", CREDENTIALS_PATH); } $client->setAccessToken($accessToken); // Refresh the token if it's expired. if ($client->isAccessTokenExpired()) { $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); file_put_contents(CREDENTIALS_PATH, json_encode($client->getAccessToken())); } return $client; } // Get the API client and construct the service object. $client = getClient(); $service = new Google_Service_Calendar($client); // Print the next 10 events on the user's calendar. $optParams = array( 'maxResults' => 10, 'orderBy' => 'startTime', 'singleEvents' => TRUE, 'timeMin' => date('c', strtotime("today midnight")), 'timeMax' => date('c', (strtotime("tomorrow midnight")-1)) ); $results = $service->events->listEvents($calendarId, $optParams); if (count($results->getItems()) == 0) { print "No upcoming events found.\n"; } else { print "Upcoming events:\n"; foreach ($results->getItems() as $event) { $start = $event->start->dateTime; if (empty($start)) { $start = $event->start->date; } printf("%s (%s)\n", $event->getSummary(), $start); foreach ($friTekst as $needle) { if (stripos($event->getSummary(), $needle) !== FALSE) { sendJSON($deviceID, 100); } } } } function sendJSON($refID, $value) { $url = 'http://localhost/JSON?request=controldevicebyvalue&ref='.$refID.'&value='.$value; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $exec = curl_exec($ch); curl_close($ch); } 5. Legg til et event i "hus-kalenderen" og sjekk at den listet opp når du nå kjører "php HomeSeer.php". 6. Sett opp følgende event: Da skal "fridag"-devicen oppdateres seg basert på kalenderen i tillegg til faste fridager fra scriptet til @Moskus. 3 Siter
ZoRaC Skrevet 25. februar 2018 Forfatter Skrevet 25. februar 2018 Ang eventet, ved nærmere ettertanke er det nok bedre å kjøre den 1 min over hver time. For om du er syk en morgen, så er det ikke sikkert du la inn det i kalenderen dagen før... Siter
ZoRaC Skrevet 26. februar 2018 Forfatter Skrevet 26. februar 2018 1 time siden, Moskus skrev: .NET er ikke vanskelig å lære... Sikkert ikke, i hvertfall når koden ligger mer eller mindre ferdig her: https://developers.google.com/google-apps/calendar/quickstart/dotnet Utfordringen er vel å få det til å virke i HS og med Mono... Siter
Guahtdim Skrevet 5. oktober 2018 Skrevet 5. oktober 2018 (endret) Hmmm, dette lukter litt plugin mat. Iallefall den delen å kunne sjekke en Google kalender for inneværende dag. Jeg har automatisert tidsstyrt oppvarming, men den er ikke konevennlig å overstyre. Endret 5. oktober 2018 av Guahtdim Siter
ZoRaC Skrevet 6. oktober 2018 Forfatter Skrevet 6. oktober 2018 8 timer siden, Guahtdim skrev: Hmmm, dette lukter litt plugin mat. Iallefall den delen å kunne sjekke en Google kalender for inneværende dag. Ja, takk! Det finnes en gData-plugin (tror den heter noe sånt), men den vedlikeholdes ikke lengre og jeg tror ikke den funker mot Google sin nye autentiseringsløsning... Siter
Guahtdim Skrevet 6. oktober 2018 Skrevet 6. oktober 2018 Jeg lover ikke noe enda. Ny utvillerpc i huset og mye som skal settes opp før jeg kan lage plugins igjen. Siter
ZoRaC Skrevet 6. oktober 2018 Forfatter Skrevet 6. oktober 2018 Det var denne jeg tenkte på: https://shop.homeseer.com/products/blade-blgdata-plug-in-for-hs3 Men, jeg husket feil - grunnen til at jeg ikke bruker den er at den ikke støttes på Linux og at den var litt kostbar for såpass enkel funksjonalitet som jeg trenger... Siter
Guahtdim Skrevet 6. oktober 2018 Skrevet 6. oktober 2018 40$. Ikke så dyrt med tanke på hvor mange timer man bruker på en plugin. Siter
ZoRaC Skrevet 6. oktober 2018 Forfatter Skrevet 6. oktober 2018 4 minutter siden, Guahtdim skrev: 40$. Ikke så dyrt med tanke på hvor mange timer man bruker på en plugin. Jeg brukte vel 1-2 timer på kalenderfunksjonen, så da var ikke 40$ verdt det. Særlig siden den ikke virker på mitt OS... Siter
Guahtdim Skrevet 6. oktober 2018 Skrevet 6. oktober 2018 Jeg kan ikke garanterer at det jeg lager fungerer i *Nix. Jeg kjøre Win og skjønner svært lite av Linux (desverre). Men slik utviklingen er nå så er det ikke umulig at jeg må lære meg å bruke *nix. Siter
ZoRaC Skrevet 6. oktober 2018 Forfatter Skrevet 6. oktober 2018 4 timer siden, Guahtdim skrev: Jeg kan ikke garanterer at det jeg lager fungerer i *Nix. Jeg kjøre Win og skjønner svært lite av Linux (desverre). Men slik utviklingen er nå så er det ikke umulig at jeg må lære meg å bruke *nix. Jeg har inntrykk av at det meste virker på Linux (Mono), uten at man trenger gjøre noe spesielt. Jeg kjører flere plugins som ikke var testet på linux, men som bare virker. 1 Siter
Moskus Skrevet 8. oktober 2018 Skrevet 8. oktober 2018 På 6.10.2018 den 16.19, Guahtdim skrev: Jeg kan ikke garanterer at det jeg lager fungerer i *Nix. Jeg kjøre Win og skjønner svært lite av Linux (desverre). Men slik utviklingen er nå så er det ikke umulig at jeg må lære meg å bruke *nix. Så lenge du ikke bruker forferdelig avanserte biblioteker som benytter Windows-APIer så fungerer det aller meste helt fint på Linux. Siter
Guahtdim Skrevet 12. oktober 2018 Skrevet 12. oktober 2018 (endret) Etter å ha fått opp testsystemet mitt (Hyper-v 2008 server og HomeSeer 3.0.0.318 siden den kjører i 30 dager uten noen lisens) så laget jeg kjapt og brutalt en POC på å hente fra Google Calendar. Akkurat nå så leter den etter en eller flere kalender events med Test som overskrift/summary. Og den er avhengig av å ha en recurring event for å kjøre igang. Jeg har bedt Zorac teste i linux hvis han gidder. Hvis noen andre har lyst til å teste noe som ikke engang kan beskrives som alfa så finner du den her (men ikke start med dette hvis du ikke er helt sikker på hva som skal gjøres) : http://bit.ly/GCalPoc2018 NB: Ta gjerne en kopi av hele HomeSeer katalogen din før du begynner å gjøre noe! Skulle ting gå virkelig galt så er det så enkelt som å kopiere tilbake katalogen. Pakk ut filene i homeseer katalogen din. Du vil få følgende filer der HSPI_GCalendarSeerPOC.exe HSPI_GCalendarSeerPOC.exe.config HSPI_GCalendarSeerPOC.pdb I homeseer/bin/GCalendarSeerPOC vil du få ca 25 filer For å komme igang må du gå inn på f.eks. følgende guide og gjøre punkt 1 https://developers.google.com/calendar/quickstart/php slik at du får credentials.json. Denne filen må du legge inn i katalogen homeseer/bin/GCalendarSeerPOC. Så setter du opp en recurring event som skjer f.eks. hvert minutt og sjekker mot kalender: Når den begynner å kjøre vil det høyst sannsynligvis komme opp en webside hvor du må tillate at enheten åpner din kalender. eks Og etter å ha valgt konto trykker du på Allow For at det skal slå ut må du ha en eller flere registrerte "events" kalenderen din med overskriften Test (Case-sensitivt søk) innenfor de neste 24 timer. Igjen: Ødelegger du noe hos deg selv med dette så tar jeg NULL ansvar. Endret 12. oktober 2018 av Guahtdim More docs 2 Siter
Guahtdim Skrevet 26. oktober 2018 Skrevet 26. oktober 2018 Jeg er så frekk at jeg linker mot min plugin 1 Siter
Anbefalte innlegg
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.